AVL树(平衡搜索树)

AVL树是一种高度平衡的二叉搜索树,由Adelson-Velsky和Landis于1962年提出。在AVL树中,每个节点的平衡因子在-1到1之间。插入和删除操作可能导致树的不平衡,需要通过四种旋转(LL, LR, RR, RL)来重新平衡。删除节点时,可能涉及替换、调整平衡因子和旋转操作。" 113086162,10546639,嵌入式Linux引导与UBoot移植详解,"['嵌入式开发', 'Bootloader', 'Linux', 'ARM架构', 'U-Boot']
摘要由CSDN通过智能技术生成

AVL树简介

AVL树是由GM Adelson - Velsky和EM Landis于1962年发明的。为了纪念其发明者,这树结构被命名为AVL。

AVL树可以定义为高度平衡二叉搜索树,其中每个节点与平衡因子相关联,该平衡因子通过从其左子树的子树中减去其右子树的高度来计算。

如果每个节点的平衡因子在-11之间,则称树是平衡的,否则,树将是不平衡的并且需要平衡。

平衡系数(k)=高度(左(k)) - 高度(右(k))

如果任何节点的平衡因子为1,则意味着左子树比右子树高一级。如果任何节点的平衡因子为0,则意味着左子树和右子树包含相等的高度。如果任何节点的平衡因子是-1,则意味着左子树比右子树低一级。

AVL树如下图所示。 可以看到,与每个节点相关的平衡因子介于-1和+1之间。 因此,它是AVL树的一个例子。

在这里插入图片描述

复杂性

算法 平均情况 最坏情况
空间 O(n) O(n)
查找 O(log n) O(log n)
插入 O(log n) O(log n)
删除 O(log n) O(log n)

AVL树插入元素

AVL树中的插入的执行方式与在二叉搜索树中执行的方式相同。 新节点作为叶节点添加到AVL树中。 但是,它可能会导致违反AVL树属性,因此树可能需要平衡。

可以通过应用旋转来平衡树。 仅当插入新节点时任何节点的平衡因子受到干扰时才需要旋转,否则不需要旋转。

根据插入的类型,旋转分为四类。

LL 右旋

新节点被插入到关键节点的左子树的左子树中

LL 右旋

LL 右旋旋转步骤

  • T向右旋转成为L的右节点
  • L的右节点Y 移动到 T的左节点上

旋转中心是根节点T的左节点(L)
右旋步骤

右旋动图

右旋动图

LR 左右旋

新节点被插入到关键节点的左子树的右子树中
LR 左右旋

LR 左右旋 两次旋转步骤

  1. 左旋转
    • L节点 左旋转,成为R的左节点
    • R的左节店(Y1)左旋转,成为L的右节点(左子节点左转)
  2. 右旋转
    • T节点 右旋转,成为R的右节点
    • R的右节点(Y2)右旋转,成为T的左节点(右子节点右转)

旋转中心是根节点T的左节点(R)
左右旋

RR 左旋

新节点被插入到关键节点的右子树的右子树中
RR

RR 左旋步骤

  • T向左旋转成为R的左结点
  • R的左节点Y放到T的右节点上

旋转中心是根节点T的右节点(R)。
左旋

左旋动图

左旋动图

RL 右左旋

新节点被插入到关键节点的右子树的左子树中
RL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值