function BinarySearchTree() {
var Node = function(key){
this.key = key;
this.left = null;
this.right = null;
}
var root = null;
var i = 0;
this.insert = function(key){
var newNode = new Node(key); //{1}
if (root === null){ //{2}
root = newNode;
} else {
insertNode(root,newNode); //{3}
}
}
var insertNode = function(node,newnode){
if(node.key>newnode.key){
if(node.left==null)
node.left = newnode;
else
insertNode(node.left,newnode);
}else{
if(node.right==null)
node.right = newnode;
else
insertNode(node.right,newnode);
}
}
this.inOrderTraverse = function(callback){
inOrderTraverseNode(root, callback); //{1}
}
//中序遍历 最深的左边子节点开始 到此节点父节点 到 此节点父节点的右边节点 一级级往上
/**中序遍历是一种以上行顺序访问BST所有节点的遍历方式,也就是以从最小到最大的顺序访问所有节点**/
var inOrderTraverseNode = function (node, callback) {
if (node !== null) { //{2}
inOrderTraverseNode(node.left, callback); //{3}
printNode(node.key); //{4}
inOrderTraverseNode(node.right, callback); //{5}
}
};
/**先序遍历是以优先于后代节点的顺序访问每个节点的。先序遍历的一种应用是打印一个结构化的文档**/
var perTraverseNode = function (node, callback) {
if (node !== null) { //{2}
printNode(node.key); //{4}
perTraverseNode(node.left, callback); //{3}
perTraverseNode(node.right, callback); //{5}
}
};
/**后序遍历则是先访问节点的后代节点,再访问节点本身。后序遍历的一种应用是计算一个目录和它的子目录中所有文件所占空间的大小**/
var postTraverseNode = function (node, callback) {
if (node !== null) { //{2}
postTraverseNode(node.left, callback); //{3}
postTraverseNode(node.right, callback); //{5}
printNode(node.key); //{4}
}
};
/**搜索最大值**/
this.max = function(){
return maxNode(root);
}
var maxNode = function(node){
if(node == null){
return false;
}
if(node){
while(node&&node.right!=null){
node = node.right;
}
return node.key;
}
return null;
}
this.search = function(key){
return searchNode(root, key); //{1}
};
var searchNode = function(node, key){
if (node === null){ //{2}
return false;
}
if (key < node.key){ //{3}
return searchNode(node.left, key); //{4}
} else if (key > node.key){ //{5}
return searchNode(node.right, key); //{6}
} else {
return true; //{7}
}
};
function printNode(value){ //{6}
console.log(value);
}
}
js二叉树
最新推荐文章于 2023-06-26 14:20:22 发布