数据结构(C):二叉排序树的删除和调平

本文详细解析了二叉排序树的删除操作及平衡调整策略,包括三种删除节点的情况,以及通过旋转操作解决四种不平衡状态的方法,确保树的高度保持在log2n级别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.删除

虽然,二叉排序树的插入都在叶子节点,但是删除却可以分为三种不同的情况;
(1)删除的节点刚好是叶子结点——直接删除
在这里插入图片描述
(2)删除的节点只有左孩子或者只有右孩子,直接让其唯一的那个孩子去替代父母的位置
(如果24只有右孩子:不用担心24的右孩子会不会比24的父母还大,因为如果24右孩子比24父母(45)还大,那么在建树的时候就会放到45的右孩子上,所以,根的左子树上的所有节点都要比它小。)
M6Ly9ibG9nLmNzZG4ubmV0L2k2MjIzNjcx,size_16,color_FFFFFF,t_70)
(3)删除的节点既有左孩子又有右孩子,两种删除方法
左子树“上位”,右子树合并到左子树,因为右子树上节点肯定都比左子树上的大,所以把右子树的根接到左子树的最右下角。在这里插入图片描述
左子树最右下角作为最接近被删节点的节点之一,可以直接替代子树的父母
在这里插入图片描述
以上的两种方法都可以作镜像变换,比如左子树最大对应右子树最小

调平(简单方法—>1

常规精简方法
因为二叉排序树有变成单只树(线性表)的风险,为了保证二叉排序树的效率与log2n同数量级,所以要将二叉排序树调成平衡二叉树。
平衡二叉树:根结点的左子树深度-右子树深度的绝对值不超过1。
不平衡共有以下四种情况
调平关键是:找到最小的非平衡二叉树的根其平衡因子绝对值一定是2,则其之前的平衡因子绝对值一定为1,分清除不平衡的类型
(1)最小的非平衡二叉树的根(A)的左子树(AL)的左子树上加了节点导致其不平衡简称(LL型)
做法:AL上去,A下来作为AL的右孩子,AL原本的右孩子作为A的左孩子
在这里插入图片描述
(2)RR型
做法:AR上去,A下来作为AR的左孩子,AR原本的左孩子作为A的右孩子
在这里插入图片描述
(3)LR型
①ALR(A的左孩子的右孩子)上去;②AL作为ALR的左孩子,ALR左孩子放到AL的右孩子;③A作为ALR的右孩子,ALR的右孩子放到A的左孩子。
在这里插入图片描述
(4)RL型
①ARL(A的右孩子的右孩子)上去;②AR作为ALR的右孩子,ARL右孩子放到AR的右孩子;③A作为ARL的左孩子,ARL的左孩子放到A的右孩子。
在这里插入图片描述


  1. 调平的简单方法(不用死记硬背)
    将不平的最小树简化成下面的模型,其中位于中间的节点直接上升为根节点,其余两侧的节点随即成为它的左右孩子,原本中间节点的左右孩子,顺势挂在左右两边的节点上。(其中e可以表示为在空节点上插入,也可以表示成在非空节点上插)
    在这里插入图片描述 ↩︎

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值