构建平衡二叉树「建议收藏」

构建平衡二叉树「建议收藏」构建平衡二叉树

大家好,又见面了,我是你们的朋友全栈君。

    我们对二叉树,二叉排序树的构建过程都很清楚,也知道二叉平衡树的概念,但是如何根据一个序列来构建平衡二叉树呢?

    我们是通过在一棵平衡二叉树中依次插入元素(按照二叉排序树的方式),若出现不平衡,则要根据新插入的结点与最低不平衡结点的位置关系进行相应的调整。分为LL型、RR型、LR型和RL型4种类型,各调整方法如下(下面用A表示最低不平衡结点):

(1)LL型调整:

    由于在A的左孩子(L)的左子树(L)上插入新结点,使原来平衡二叉树变得不平衡,此时A的平衡因子由1增至2。下面图1是LL型的最简单形式。显然,按照大小关系,结点B应作为新的根结点,其余两个节点分别作为左右孩子节点才能平衡,A结点就好像是绕结点B顺时针旋转一样。

构建平衡二叉树「建议收藏」

    LL型调整的一般形式如下图所示,表示在A的左孩子B的左子树BL(不一定为空)中插入结点(图中阴影部分所示)而导致不平衡( h 表示子树的深度)。这种情况调整如下:①将A的左孩子B提升为新的根结点;②将原来的根结点A降为B的右孩子;③各子树按大小关系连接(BL和AR不变,BR调整为A的左子树)。

构建平衡二叉树「建议收藏」

(2)RR型调整:

    由于在A的右孩子(R)的右子树(R)上插入新结点,使原来平衡二叉树变得不平衡,此时A的平衡因子由-1变为-2。图3是RR型的最简单形式。显然,按照大小关系,结点B应作为新的根结点,其余两个节点分别作为左右孩子节点才能平衡,A结点就好像是绕结点B逆时针旋转一样。

构建平衡二叉树「建议收藏」

    RR型调整的一般形式如下图4所示,表示在A的右孩子B的右子树BR(不一定为空)中插入结点(图中阴影部分所示)而导致不平衡( h 表示子树的深度)。这种情况调整如下:①将A的右孩子B提升为新的根结点;②将原来的根结点A降为B的左孩子;③各子树按大小关系连接(AL和BR不变,
BL
调整为A的右子树)。

构建平衡二叉树「建议收藏」

(3)LR型调整:

    由于在A的左孩子(L)的右子树(R)上插入新结点,使原来平衡二叉树变得不平衡,此时A的平衡因子由1变为2。图5是LR型的最简单形式。显然,按照大小关系,结点C应作为新的根结点,其余两个节点分别作为左右孩子节点才能平衡。

构建平衡二叉树「建议收藏」

    LR型调整的一般形式如下图6所示,表示在A的左孩子B的右子树(根结点为C,不一定为空)中插入结点(图中两个阴影部分之一)而导致不平衡( h 表示子树的深度)。这种情况调整如下:①将C的右孩子B提升为新的根结点;②将原来的根结点A降为C的右孩子;③各子树按大小关系连接(BL和AR不变,CL和CR分别调整为B的右子树和A的左子树)。

构建平衡二叉树「建议收藏」

(4)RL型调整:

    由于在A的右孩子(R)的左子树(L)上插入新结点,使原来平衡二叉树变得不平衡,此时A的平衡因子由-1变为-2。图7是RL型的最简单形式。显然,按照大小关系,结点C应作为新的根结点,其余两个节点分别作为左右孩子节点才能平衡。

构建平衡二叉树「建议收藏」

    RL型调整的一般形式如下图8所示,表示在A的右孩子B的左子树(根结点为C,不一定为空)中插入结点(图中两个阴影部分之一)而导致不平衡( h 表示子树的深度)。这种情况调整如下:①将C的右孩子B提升为新的根结点;②将原来的根结点A降为C的左孩子;③各子树按大小关系连接(AL和BR不变,C
L和CR分别
调整为A的右子树和B的左子树)。

构建平衡二叉树「建议收藏」


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/105711.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月25日 上午6:20
下一篇 2022年4月25日 上午6:40


相关推荐

  • idea2021.4.14版本永久激活码_通用破解码

    idea2021.4.14版本永久激活码_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
    51
  • Openclaw自己操作Claude code完整开发了TikTok爆款分析系统

    Openclaw自己操作Claude code完整开发了TikTok爆款分析系统

    2026年3月13日
    3
  • Mac idea2022.01.13激活码_最新在线免费激活

    (Mac idea2022.01.13激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月31日
    67
  • 防火墙文件打印共享服务器,防火墙 网络打印机共享服务器

    防火墙文件打印共享服务器,防火墙 网络打印机共享服务器Win7 和 WinXP 共享的设置问题二则 共享打印机和 FTP 在 允许程序通过 Windows 防火墙通信 下勾选 网络发现 和 文件和打印机共享 并且 家庭 工作 专用 和 公用 都勾选 4 Win7 中应该启用 Guest 帐号 WinXP 机器方 1 首先要启用 文件和打印机共享 注意 在 文章万仓一黍 2011 06 09927 浏览量 Win7 和 WinXP 共享的设置问题二则 共享打印机和 FTP

    2026年3月17日
    2
  • java动态代理中的invoke方法是如何被自动调用的「建议收藏」

    java动态代理中的invoke方法是如何被自动调用的「建议收藏」Java中动态代理的实现,关键就是这两个东西:Proxy、InvocationHandler,下面从InvocationHandler接口中的invoke方法入手,简单说明一下Java如何实现动态代理的。        首先,invoke方法的完整形式如下: Java代码  public Object invoke(Object proxy, Method m

    2022年4月30日
    124
  • TIFF文件结构详解

    TIFF文件结构详解1 TIFF 概述 TIFF 是 TaggedImageF 的缩写 在现在的标准中 只有 TIFF 存在 其他的提法已经舍弃不用了 做为一种标记语言 TIFF 与其他文件格式最大的不同在于除了图像数据 它还可以记录很多图像的其他信息 它记录图像数据的方式也比较灵活 理论上来说 任何其他的图像格式都能为 TIFF 所用 嵌入到 TIFF 里面 比如 JPEG LosslessJPEG JPEG2000 和任意数据宽度的原始无压缩数据都可以方便的嵌入到 TIFF 中去 由于它的可扩展性 TIFF 在数

    2026年3月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号