function Binarytree(){
var Node = function(key){
this.key=key;
this.left=null;
this.right=null;
};
var root=null; //根节点
// 插入节点
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.insert = function(key){
var newNode = new Node(key);
if(root===null){
root=newNode;
}else{
insertNode(root,newNode);
}
}
var inOrderTraverseNode = function(node,callback){
if(node !== null){
inOrderTraverseNode(node.left,callback);
callback(node.key);
inOrderTraverseNode(node.right,callback);
}
}
//中序遍历
this.inOrderTraverse = function(callback){
inOrderTraverseNode(root,callback)
}
var preOrderTraverseNode = function(node,callback){
if(node !== null){
callback(node.key);
preOrderTraverseNode(node.left,callback);
preOrderTraverseNode(node.right,callback);
}
}
//前序遍历
this.preOrderTraverse = function(callback){
preOrderTraverseNode(root,callback)
}
var postOrderTraverseNode = function(node,callback){
if(node !== null){
preOrderTraverseNode(node.left,callback);
preOrderTraverseNode(node.right,callback);
callback(node.key);
}
}
//后序遍历
this.postOrderTraverse = function(callback){
postOrderTraverseNode(root,callback);
}
var minNode=function(node){
if(node){
while(node && node.left !== null){
node = node.left;
}
return node.key;
}
return null;
}
//最小值
this.min = function(){
return minNode(root);
}
//最大值
var maxNode = function(node){
if(node){
while(node && node.right !== null){
node = node.right;
}
return node.key;
}
return null;
}
this.max=function(){
return maxNode(root)
}
//查找子节点
var searchNode = function(node,key){
if(node === null){
return false;
}
if(key<node.key){
return searchNode(node.left,key);
}else if(key>node.key){
return searchNode(node.right,key)
}else{
return true;
}
}
this.search = function(key){
return searchNode(root,key);
}
}
var nodes=[8,3,10,6,14,5,2,7,1];
var binaryTree = new Binarytree();
nodes.forEach(function(key){
binaryTree.insert(key);
});
var callback = function(key){
console.log(key);
}
// binaryTree.inOrderTraverse(callback)
// binaryTree.preOrderTraverse(callback)
// binaryTree.postOrderTraverse(callback)
console.log('min:'+binaryTree.min())
console.log('max:'+binaryTree.max())
console.log(binaryTree.search(7)?'key 7 is found':'key 7 is not found')
console.log(binaryTree.search(9)?'key 9 is found':'key 9 is not found')
复制代码
二叉树
最新推荐文章于 2025-08-24 09:29:29 发布