c++创建二叉树_数据结构:查找(4)|| 平衡二叉树

在介绍平衡二叉树之前,应该先了解平衡因子的概念,平衡因子定义为左子树深度减去右子树深度,这个值的绝对值越大,非常容易理解它就对应着越不平衡的情况。一棵平衡的二叉树的平衡因子只能是1,0,-1

如何构建一棵平衡二叉树呢?

对一棵平衡的二叉树进行插入操作,插入后,可能导致不平衡,对不平衡的二叉树应该进行旋转操作,将其旋转为平衡二叉树。平衡二叉树应该具有二叉树的性质的同时满足平衡条件。

如何进行旋转操作?

旋转操作实际上是对不平衡部分进行再调整的过程。

是对二叉树的局部重排。

书上将旋转操作划分为4种情况,并分别用了几个看不懂的图和介绍来试图让我们搞懂,我重新画了一个图,介绍在插入C结点后需要进行局部调整时如何进行旋转。

43737fc3ca88d341ece33a0d757ee66d.png

如图黄色框区域,需要进行局部调整

局部调整由排列组合,共有以下四种情况

785d34cb9b8c6b2a4fcf8f89a7e57f43.png

有了以上的理论基础我们就可以写出

在平衡二叉树上插入新元素e的递归算法

①(创建新树,递归出口1)若原二叉树为空树,则插入结点为根节点,树的深度加1

②(查找存在,递归出口2)若e的关键字和根节点的关键字相同,停止插入

③(查找不存在,执行插入,递归出口3)插入

③.① 插入过程,需要更新结点的平衡因子,深度出现异常进行旋转

④(递归入口)进入左子树或右子树,在左/右子树插入C

有了以上的讲解,写出想要的代码就不是什么难事啦~

挖坑:

接下来一周,将尽量完成B树、键树、哈希表

考试周期间对数据结构进行系统复习时,将补上图、内外排序部分的内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值