当前位置:首页 > 编程笔记 > 正文
已解决

平衡二叉树删除结点后的调整操作

来自网友在路上 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%的人还看了

猜你感兴趣

版权申明

本文"平衡二叉树删除结点后的调整操作":http://eshow365.cn/6-9073-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!