已解决
平衡二叉树删除结点后的调整操作
来自网友在路上 162862提问 提问时间:2023-09-19 03:17:37阅读次数: 62
最佳答案 问答题库628位专家为你答疑解惑
1.回顾插入操作
- ·插入新结点后,要保持二叉排序树的特性不变(左<中<右)
- 若插入新结点导致不平衡,则需要调整平衡。
2.删除操作
- 删除结点后,要保持二叉排序树的特性不变(左<中<右)
- 若删除结点导致不平衡,则需要调整平衡。
1.具体步骤:
1 . 用二叉排序树的方法删除结点:详情见:二叉排序树删除规则
- 若删除的结点是叶子,直接删。
- 若删除的结点只有一个子树,用子树顶替删除位置。
- 若删除的结点有两棵子树,用前驱(或后继)结点。
- 顶替,并转换为对前驱(或后继)结点的删除。
2 . 从叶子结点一路向上找“最小不平衡子树”
3 . 若找到了最小平衡二叉树,找到高度最大的儿子结点和孙子结点。
4 . 根据其树高最大的孙子结点的位置,调整平衡二叉树:(LL,RR,LR,RL四种情况)
- 孙子在LL:儿子右单旋
- 孙子在RR:儿子左单旋
- 孙子在LR:孙子先左旋,再右旋
- 孙子在RL:孙子先右旋,再左旋
具体二叉树旋转操作见博客:平衡二叉树的定义,插入操作以及插入新结点后的调整规则(ALV树)
5 . 如果调整后不平衡,则继续向上调整(进行第二步),直到二叉树平衡。
- 对最小不平衡子树的旋转可能导致树变矮,从而导致上层祖先不平衡(不平衡向上传递)
3.时间复杂度
平衡二叉树删除操作时间复杂度为 O ( l o g 2 n ) O(log_2n) O(log2n)。
查看全文
99%的人还看了
相似问题
- 【剑指offer|图解|链表】链表的中间结点 + 链表中倒数第k个结点
- 【数据结构初阶(3)】双向带头结点循环链表
- 单链表相关面试题--4.输入一个链表,输出该链表中倒数第k个结点
- 王道数据结构课后代码题p150 15.设有一棵满二叉树(所有结点值均不同),已知其先序序列为 pre,设计一个算法求其后序序列post。(c语言代码实现)
- 【数据结构】树的基本性质(计算树的总结点数与叶结点数)
- 【数据结构】树与二叉树(五):二叉树的顺序存储(初始化,插入结点,获取父节点、左右子节点等)
- NowCoder | 链表中倒数第k个结点
- 设一棵完全二叉树具有1000个结点,则此完全二叉树有()叶子结点,有()个度为2的结点。
- 11.3递归建二叉树,二叉树函数规范化输入输出,一些二叉树性质,求叶子结点与树的高度
- 二叉树第i层结点个数
猜你感兴趣
版权申明
本文"平衡二叉树删除结点后的调整操作":http://eshow365.cn/6-9073-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: 机器学习第七课--情感分析系统
- 下一篇: 浅谈电力电容器技术的发展及选型