BST二叉树

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;
	   }
     }	
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值