二叉排序树的删除操作

二叉排序树,BST,又名二叉查找树
特点:
1.当前结点左子树的键值一定小于当前结点的键值,右子树的键值一定大于当前结点键值。
2.中序遍历键值有序递增

二叉排序树增加结点时较简单,在此忽略。主要写一下二叉排序树的删除操作。
要删除的结点可分为三种情况:
1.要删除的结点为叶子结点
2.要删除的结点有且仅有一棵子树
3.要删除的结点有两棵子树

对于情况1,只需删除该结点即可。
对于情况2,删除该结点,并用该结点的子树的根结点替代该结点的位置即可,
入下图,删除结点8时,结点8仅有左子树,所以左子树的根结点结点6取代结点8的位置即可在这里插入图片描述
对于情况3,删除该结点,并用中序遍历的直接后继【或前驱】结点取代当前删除结点的位置。PS:后面的讨论以后继结点为例。
3.1若该结点的后继结点为叶子结点,删除该结点,直接用后继结点取代该结点位置。
删除结点2时,结点2后继结点3为叶子结点,直接用结点3取代结点2的位置
在这里插入图片描述
删除结点8时,结点8后继结点为结点9,同样为叶子结点,直接用结点9取代结点8的位置
在这里插入图片描述
3.2若该结点的后继结点存在子树,该后继结点仅可能存在右子树【若该后继结点存在左子树,根据二叉排序树的性质,一定存在比该后继结点键值小,且比要删除的结点键值大的结点,说明前面找到的后继结点是错误的】。
如图,删除结点8时,直接用其后继结点9取代结点8的位置,此时原结点9的位置空出,此问题转化成规模更小的情况2【即删除仅存在一棵子树的情况】,然后将该子树的跟结点11取代原结点9的位置即可。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值