二叉树(四) 二叉查找树(BST)

二叉查找树:对于二叉查找树的任何一个节点,设这个节点的值为K,这个节点的左子树的任意一个节点的值都小于K,右子树的任何一个节点的值都大于等于K。

对于任何的二叉查找树,使用中序遍历(左根右),可以将值从小到大打印出来。


对于二叉查找树的检索,例如图a,需要检索32,那么首先需要检索根节点,发现37大于32,进入二叉搜索树的左子树,发现24小于32,然后在进入右子树,发现根节点等于32,那么就返回找到了。

对于检索35,进入的路径和上述一样,但是最后返回null,并没有找到。

对于插入新的值,我们需要将首先找到插入的位置,然后在进行插入,如果二叉树不允许插入相同的值,在二叉查找树中有这个值的存在,那么就报异常,如果允许,需要插入相同值的同样节点。对于节点值为35,插入图a,如下


从BST中删除一个节点,需要首先找到这个节点然后在进行处理,我们首先以删除一个最小值的节点为例,找到最小值的点,简单,我们只需要一直往左子树遍历下去,就可以找到最小值的点,在删除这个节点之前,需要将这个节点的父节点的指针,指向节点的右子树节点。具体的示意图如下:


接下来我们需要讨论的是删除任意一个值的节点R,这里删除有多种情况,如果R没有子节点,可以将其父节点的指针设置为NULL,如果R只有一个节点,那么将父节点的指针指向它的节点,如果有连个子节点,我们就使用一个值代替他。那么究竟是用什么样的值代替他呢?那么就是大于删除值的最小值,小于删除值的最大值。


上图中,我们使用右子树的最小值进行替代root节点。

如果BST中没有重复的值,使用左子树或者右子树的值替代,没有什么区别,但是在有重复值时,要使用右子树的值替代。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值