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

来源:互联网 发布:js隐藏手机号码中间 编辑:程序博客网 时间:2024/06/05 03:34
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));


原创粉丝点击