数据结构-树和二叉树(六)二叉平衡树

本文详细介绍了二叉平衡树的定义、平衡二叉树的插入调整以及查找效率分析!
Let’s go!🏃‍♂️
👉数据结构-树和二叉树(五)二叉排序树

数据结构-树和二叉树(六)二叉平衡树 ⚖

在这里插入图片描述

1、定义

平衡二叉树(Balanced Binary Tree), 简称平衡树(AVL树) ——树上任一结点的左子树和右子树的高度之差不超过1。
结点的平衡因子 = 左子树高 - 右子树高。

2、AVL树的插入

(1)LL平衡旋转

LL平衡旋转( 右单旋转)。由于在结点A的左孩子( L)的左子树( L)上插入了新结点, A的平衡因子由1增至2,导致以A为根的子树失去平衡,需要一次向右的旋转操作。将A的左孩子B向右上旋转代替A成为根结点,将A结点向右下旋转成为B的右子树的根结点,而B的原右子树则作为A结点的左子树。

在这里插入图片描述

(2)RR平衡旋转

RR平衡旋转( 左单旋转)。由于在结点A的右孩子( R)的右子树( R)上插入了新结点, A的平衡因子由-1减至-2,导致以A为根的子树失去平衡,需要一次向左的旋转操作。将A的右孩子B向左上旋转代替A成为根结点,将A结点向左下旋转成为B的左子树的根结点,而B的原左子树则作为A结点的右子树。

在这里插入图片描述

(3)LR平衡旋转

LR平衡旋转(先左后右双旋转)。由于在A的左孩子(L)的右子树(R)上插入新结点, A的平衡因子由1增至2,导致以A为根的子树失去平衡,需要进行两次旋转操作,先左旋转后右旋转。先将A结点的左孩子B的右子树的根结点C向左上旋转提升到B结点的位置,然后再把该C结点向右上旋转提升到A结点的位置。

在这里插入图片描述

(4)RL平衡旋转

RL平衡旋转(先右后左双旋转)。由于在A的右孩子(R)的左子树(L)上插入新结点, A的平衡因子由-1减至-2,导致以A为根的子树失去平衡,需要进行两次旋转操作,先右旋转后左旋转。先将A结点的右孩子B的左子树的根结点C向右上旋转提升到B结点的位置,然后再把该C结点向左上旋转提升到A结点的位置。

在这里插入图片描述

3、查找效率分析

平衡二叉树—树上任一结点的左子树和右子树的高度之差不超过1

若树高为h,则最坏情况下,查找一个关键字最多需要对比 h 次,即查找操作的时间复杂度不可能超过 O(h)

假设以 nh 表示深度为 h 的平衡树中含有的最少结点数。

则有n0 = 0, n1 = 1, n2 = 2, 并且有nh = nh-1 + nh-2 + 1

可以证明含有n个结点的平衡二叉树的最大深度为O(log2n) , 平衡二叉树的平均查找长度为O(log2n)

4、例题

题目: 按顺序插入【21,30,50,26,60,66,24】构建平衡二叉树,请画出插入并调整为平衡二叉树的过程。

过程如下:

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值