二叉查找树数组表示的JavaScript实现

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实现》

点赞