js数据结构与算法----树

来源:互联网 发布:美如画网络机顶盒设置 编辑:程序博客网 时间:2024/06/07 18:26

树是一种非顺序结构,二叉树 ,二叉搜索树BST,

function BinarySearchTree(){
var Node=function(key){
this.key=key;
this.left=null;
this.right=null;
};
var root=null;
// 插入一个值
this.insert=function(key){
var newNode =new Node(key);
if(root===null){
root=newNode;
} else {
insertNode(root,newNode);
}
};
var insertNode=function(node,newNode){
if(newNode.key<node.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){
inOderTraverseNode(root,callback);
};
var inOderTraverseNode=function (node,callback){
if(node !==null){
inOderTraverseNode(node.left,callback);
callback(node.key);
inOderTraverseNode(node.right,callback);
}
};
// 先序遍历
this.preOrderTraverse=function(callback){
preOderTraverseNode(root,callback);
};
var preOderTraverseNode=function (node,callback){
if(node !==null){
callback(node.key);
preOderTraverseNode(node.left,callback);
preOderTraverseNode(node.right,callback);
}
};
// 后序遍历
this.postOrderTraverse=function(callback){
postOderTraverseNode(root,callback);
};
var postOderTraverseNode=function (node,callback){
if(node !==null){
postOderTraverseNode(node.left,callback);
postOderTraverseNode(node.right,callback);
callback(node.key);
}
};
// 找到树中最小值
this.min=function(){
return minNode(root);
};
var minNode=function(node){
if(node){
while(node&&node.left !==null){
node=node.left;
}
return node.key
} else {
return null;
}
};
//找到最大值
this.max=function(){
return maxNode(root);
};
var maxNode=function(node){
if(node){
while(node&&node.right !==null){
node=node.right;
}
return node.key
} else {
return null;
}
};
// 搜索特定的值
this.search=function(key){
return searchNode(root,key);
};
var searchNode=function(node,key){
if(node==null){
return false;
} else {
if(node.key<key){
return searchNode(node.right,key);
} else if (node.key>key){
return searchNode(node.left,key);
} else {
return true;
}
}
};

};
function printTree(value){
console.log(value)
}
var tree=new BinarySearchTree();
tree.insert(76);
tree.insert(78);
tree.insert(96);
tree.insert(6);
tree.insert(8);
// tree.postOrderTraverse(printTree);
var min1=tree.max();
console.log(min1);