function BinarySearchTree(initialArray){
//底层数组
var elementData = [];
//往二叉查找树中添加元素
var addElement = function(array,index,element){
//如果是空树
if(!array.length){
//设置根节点
array[0] = element;
}
else{
var cur = array[index];
if(element < cur){
if(array[2*index+1] !== undefined){
addElement(array,2*index+1,element);
}
else{
array[2*index+1] = element;
}
}
else{
if(array[2*index+2] !== undefined){
addElement(array,2*index+2,element);
}
else{
array[2*index+2] = element;
}
}
}
};
//中序遍历,并将结果返回
var inOrder = function(binaryTree,index){
var res = [];
if(binaryTree[index] !== void 0){
res = res.concat(inOrder(binaryTree,2*index+1));
res.push(binaryTree[index]);
res = res.concat(inOrder(binaryTree,2*index+2));
}
return res;
};
if(!BinarySearchTree.prototype.addElement){
BinarySearchTree.prototype.addElement = function(e){
addElement(elementData,0,e);
};
}
if(!BinarySearchTree.prototype.inOrder){
BinarySearchTree.prototype.inOrder = function(){
return inOrder(elementData,0);
};
}
//判断某个数组是不是二叉查找树
if(!BinarySearchTree.isBSTArray){
BinarySearchTree.isBSTArray = function(array){
if (arguments.length === 0) {
return false;
};
//中序遍历
var res = inOrder(array,0);
//如果遍历结果不是增序,说明不是二叉查找树
for(var i=0;i<res.length-1;i++){
if(res[i] > res[i+1]){
return false;
}
}
//是增序,返回真
return true;
};
}
//利用初始化数组对树做初始化
if(initialArray){
for(var i=0;i<initialArray.length;i++){
addElement(elementData,0,initialArray[i]);
}
}
}
var initialArray = [1,2,3];
console.log("初始化数组为:" + initialArray);
console.log("生成二叉查找树...");
var bst = new BinarySearchTree(initialArray);
var element = 4;
console.log("添加元素:" + element);
bst.addElement(element);
console.log("中序遍历结果:" + bst.inOrder());
console.log("测试isBSTArray方法...");
var test1 = [2,1,3,0,1];
console.log("test1:" + test1);
console.log("res1:" + BinarySearchTree.isBSTArray(test1));
var test2 = [2,1,3,,0];
console.log("test2:" + test2);
console.log("res2:" + BinarySearchTree.isBSTArray(test2));
二叉查找树数组表示的JavaScript实现
猜你喜欢
转载自blog.csdn.net/esir82/article/details/78206134
今日推荐
周排行