BTS 二叉搜索树
function BST(){
var Node=function(key){
this.key=key;
this.left=left;
this.right=right;
}
var root = null;
//插入一个新节点
this.insert=function(key){
var newNode=new Node(key);//定义一个新插入节点的值
var insertNode=function(root,newNode){
if(newNode.key<root.key){
if(root.left===null){
root.left=newNode;
}
else{
insertNode(root.left,newNode)//递归每个左节点,直到找到空的左节点
}
if(newNode.key>root.key){
if(root.right===null){
root.right=newNode;
}
else{
insertNode(root.right,newNode)
}
}
}
if(root===null){
root=newNode;
}
else{
insertNode(root,newNode);
}
}
//中序遍历 :从小到大的顺序遍历
this.midTraverse=function(callback){//回调函数用来定义我们对遍历到的每个节点进行的操作
var midTraverseNode=function(node,callback){
if(node!==null){//停止递归继续执行的判断条件
midTraverseNode(node.left,callback);
callback(node.key);
midTraverseNode(node.right,callback);
}
}
midTraverseNode(root,callback);
}
//前序遍历
this.preTraverse=function(callback){
var preTraverseNode=function(node,callback){
if(node!==null){
callback(node.key)
preTraverseNode(node.left,callback)
preTraverseNode(node.right,callback)
}
}
preTraverseNode(root,callback)
}
//后序遍历
this.postTraverse=function(callback){
var postTraverseNode=function(node,callback){
if(node!==null){
postTraverseNode(node.left,callback);
postTraverseNode(node.right,callback);
callback(node.key)
}
}
postTraverseNode(root,callback)
}
//删除节点
this.removeNode=function(node,key){
if(node===null){
return false;
}
if(key<node.key){
node.left=removeNode(node.left,key)
ret node
}
else if(key>node.kety){
node.right=removeNode(node.right,key)
return node
}
else{
//删除没有子节点的叶节点
if(node.left==null&&node.right==null){
node=null;
return node
}
//删除只有一个子节点的叶节点
if(node.left==null){
node=node.right;
return node;
}
else if(node.right==null){
node=node.left;
return node;
}
//删除有两个子节点的叶节点
var findMinNode=function(node){
while(node&&node.left!==null){
node=node.left;
}
return node
};
var aux=findMinNode(node.right){
node.key=aux.key;
node.right=removeNode(node.right,aux.key)
return node;
}
}
}
}