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

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

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

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

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


相关推荐

  • 点赞投票群二维码_朋友圈集赞活动链接怎么做

    点赞投票群二维码_朋友圈集赞活动链接怎么做一、了解点赞起源历史点赞自2010年诞生以来,大拇指点“赞”按钮迅速被人们接受,而后成为facebook的另一种标志.后面到百度,qq空间,新浪微博,腾讯微博都添加了点赞按钮,商家们想借此提升人气,策划了各种“点赞有礼”的活动.为了获得更多的奖品的人们结队成群,所以诞生了“点赞族”.道行高者更称为“点赞狂魔”.微信因为有针对商家的公众平台,以及qq用户的支持.所以成为点赞活动参与者的首选.二、微信…

    2022年9月6日
    3
  • phpstorm 激活码 suspend[在线序列号]

    phpstorm 激活码 suspend[在线序列号],https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    67
  • 森林岔路91%_森林的指路牌

    森林岔路91%_森林的指路牌原题链接森森开了一家快递公司,叫森森快递。因为公司刚刚开张,所以业务路线很简单,可以认为是一条直线上的N个城市,这些城市从左到右依次从0到(N−1)编号。由于道路限制,第i号城市(i=0,⋯,N−2)与第(i+1)号城市中间往返的运输货物重量在同一时刻不能超过C​i​​ 公斤。公司开张后很快接到了Q张订单,其中j张订单描述了某些指定的货物要从S​j​​ 号城市运输到T​j​​ 号城市。这里我们简单地假设所有货物都有无限货源,森森会不定时地挑选其中一部分货物进行运输。安全起见,这些货物不会在中

    2022年8月8日
    1
  • 用户浏览历史记录_微博怎么看最近浏览过的用户

    用户浏览历史记录_微博怎么看最近浏览过的用户用户在访问每个商品详情页面时,都要记录浏览历史记录历史记录只需保存多个商品的sku_id即可,而且需要保持添加sku_id的顺序,所以采用redis中的列表来保存,redis的数据存储设计在配置文

    2022年8月3日
    5
  • 连载:面向对象葵花宝典:思想、技巧与实践(38) – 设计模式之道

    连载:面向对象葵花宝典:思想、技巧与实践(38) – 设计模式之道

    2022年1月23日
    45
  • c++和java哪个好学_c++语言和Java语言,初学者该如何选择?「建议收藏」

    c++和java哪个好学_c++语言和Java语言,初学者该如何选择?「建议收藏」方向比努力更重要,对于初学编程的人来说选择一门合适的编程语言关系到自己以后的职业发展。c++和Java的区别有哪些?哪个更适合作为入门语言?今天就听小姐姐来讲一讲。 C++语言它是正宗的C语言的嫡系,由C语言发展而来。C++支持多种编程范式–面向对象编程、泛型编程和过程化编程,支持类:类、封装、重载等特性。C++语言的主要特点表现在两个方面,一是尽量兼容C,二是支持面向对象的方法。它操持了C的…

    2022年7月9日
    17

发表回复

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

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