二叉树的高度_数据结构(八)平衡二叉树

本文探讨了平衡二叉树的概念及其重要性,防止二叉树退化为链表结构。通过分析二叉树的平衡性质,判断何时需要调整,并详细介绍了如何通过左旋、右旋操作调整不平衡的二叉树。最后,讨论了寻找最低失衡节点和确定旋转轴的方法,为实际代码实现奠定了基础。
摘要由CSDN通过智能技术生成

该来的总会来,平衡二叉树果然又来了....

出现背景

前文已经研究过普通的二叉树,
为什么要用二叉树呢?因为二叉树的结构可以实现二分法查找的效果。

你比如前文介绍的满二叉树:如下图所示,

bae4d016a27e9409b6d0393e0bc0d0b2.png

如果你想要查找4号元素,你只需要遍历3次即可。

所以在理想情况下,二叉树可以优化遍历。遍历时的时间复杂度基本上为0(logn)。但是考虑一种情况,在按顺序插入数据的情况下,二叉树会退化成链表结构
如下图所示:

f23bb2b4f38550d76b9747a739052a9f.png

此时,因为是按照一定顺序插入,所以最后形成的二叉树结构是呈一种线性的,相当于一个有序的链表。

此时如果遍历查询,在时间复杂度上和链表是等同的(0(n))。

那如何避免二叉树退化呢?首先考虑下不让二叉树退化是什么意思?也就是目的

不让二叉树退化是说即便是在顺序插入的情况下,也不能让其成为线性结构。这就是目的,也就是说避免二叉树在某些情况下成为线性链表

那么为了实现这个目的,应该如何做呢?尽量将其调整为满二叉树形式或者向满二叉树靠近,但是满二叉树对每层的节点个数都有固定要求,如果单纯的就是调整为满二叉树也不现实。

所以我们要将二叉树尽量调整为左右子树高度差最多不超过1的平衡二叉树。

这也就是平衡二叉树的作用了。
所以,接下来为了避免二叉树的退化,我们需要明白二叉树什么时候需要调整,要怎么调整。
也就是做两件事

  • when?何时调整?判断二叉树是不是平衡二叉树

  • how?如何调整?将非平衡的二叉树调整为平衡二叉树

识别平衡二叉树

既然要将不平衡的二叉树进行调整,那么什么样的树是平衡的?什么样的树是不平衡的?

一定要按照平衡二叉树的性质来区分判断:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值