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

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

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

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

    我们是通过在一棵平衡二叉树中依次插入元素(按照二叉排序树的方式),若出现不平衡,则要根据新插入的结点与最低不平衡结点的位置关系进行相应的调整。分为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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Mysql创建新用户方法

    1.CREATE USER语法:CREATE USER 'username'@'host' IDENTIFIED&#160

    2021年12月27日
    39
  • 非阻塞connect,错误码:EINPROGRESS

    http://blog.csdn.net/benbendy1984/article/details/5773137当我们以非阻塞的方式来进行连接的时候,返回的结果如果是-1,这并不代表这次连接发生了错误,如果它的返回结果是EINPROGRESS,那么就代表连接还在进行中。

    2022年4月10日
    65
  • 【Unity3D插件】Unity3D各类教程汇总「建议收藏」

    推荐阅读CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客QQ群:1040082875一、工具篇工欲善其事,必先利其器学习Unity3D不从工具篇说起怎么能行?学习Unity3D最重要的两个工具:Unity3D和VisualStudio(VisualStudioCode也行)1-1、Unity3D安装Unity安装个人免费版步骤详解(通过UnityHub安装unity,是比较流行的安装方式)https://blog.csdn.net/fi.

    2022年4月14日
    53
  • GPU利用率低的解决办法

    GPU利用率低的解决办法watch-n0.1-dnvidia-smi#检查GPU利用率参数解决办法:1.dataloader设置参数2.增大batchsize3.减少IO操作,比如tensorboard的写入和打印。4.换显卡

    2022年6月30日
    120
  • Nexus3功能介绍

    Nexus3功能介绍1、BrowseServerContent1.1Search这个就是类似Maven仓库上的搜索功能,就是从私服上查找是否有哪些包。注意:在Search这级是支持模糊搜索的1.2Browse1.3Upload顾名思义就是上传jar包到私服中,可以选择其中一个hosted仓库。注意:通过页面直接上传的方式只是上传了jar包,若这个jar通过Mave…

    2022年7月12日
    13
  • request.getRealPath 过期解决

    request.getRealPath 过期解决例子:StringfileUrl=request.getSession().getServletContext().getRealPath("/upload")+"/stafftemplate.xls"; request.getRealPath("")这个方法已经不推荐使用了,那代替它的是什么方法呢?下面就是替代它的方法:request.getSessio…

    2022年9月18日
    3

发表回复

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

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