二叉搜索树实现

二叉搜索树的实现是用树的结果来实现的

搜索二叉树的构成原理:

递归找到要插入的位置,然后创建节点返回的时候把节点连接起来,

二叉搜索树就是左边的都比跟节点小,右边的都比根节点大,和折半查找差不多

首先介绍二叉搜索的insert操作,就是构成二叉搜索树

	public Node _insert(Node node,int key,int value) {
		if(node ==null) {
			count++;
			return new Node(key, value);
		}
		
		if(node.key==key) {
			node.value =value;
		}
		else if(key>node.key) {
			node.right=_insert(node.right,key,value);
		}
		else {
			node.left=_insert(node.left,key,value);
		}
		return node;
	} 

介绍二叉搜索树的remove函数的原理

首先先要找到这个要删除的节点,如果找不到返回null

remove分为3种结果

如果删除节点的right为空 那么直接用该节点的left代替该节点

如果删除节点的left为空 那么直接用该节点的right代替该节点

如果删除节点左右孩子都不为空

那就去寻找该右节点的最小的那个数或者寻找该左节点的最大的数

来代替这个要替换的节点

接下来我们讲解找右节点最小的数

因为最小的都在搜索树的右节点只要递归找的右节点即可

	public Node minnum(Node node) {
		if(node.left==null) {
			return node;
		}
		return minnum(node.left);
	}

 找到最小的节点,那么该节点必然没有left

所以根据以上规则删除最小的这个节点

	private Node removeMin(Node right) {
		if(right.left==null) {
			return right.right;
		}
		right.left= removeMin(right.left);
		return right;
	}

然后根据找出来的这个节点替换要remove的节点

	private Node _remove(Node node,int k) {
		if(node==null) {
			return null;
		}
		if(k>node.key) {
			node.right=_remove(node.right,k);
			return node;
		}
		else if(k<node.key) {
			node.left=_remove(node.left, k);
			return node;
		}
		else {
			if(node.left==null) {
				Node rightNode = node.right;
				count--;
				return rightNode;
			}
			else if(node.right==null) {
				Node leftNode = node.left;
				count--;
				return leftNode;
			}
			else {
				 Node delnode = node;
				 Node rightmin= minnum(node.right);
				 rightmin.right=removeMin(node.right);
				 rightmin.left= node.left;
				 return rightmin;
			}
		}
	}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值