自平衡二叉树(AVL)及四种旋转方式详解

推荐可视化插入、删除节点的二叉树网站:AVL Tree Visualzation (usfca.edu)

1. 概述

        AVL树是一种自平衡二叉搜索树,他是搜索二叉树(BST)的优化,它在每次插入或删除操作后,通过旋转节点来保持树的平衡性。AVL树的平衡条件是任意节点的左子树和右子树的高度差平衡因子p)不超过1,即平衡因子可以是-1、0或1。

p =Height(Tl) - Height(Tr)

2. AVL树的特点

  1. 平衡性:AVL树的平衡性保证了查找、插入和删除操作的时间复杂度为O(log n),其中n是树中节点的数量。
  2. 自平衡操作:当进行插入或删除操作时,AVL树会根据平衡因子的变化,进行旋转操作来调整节点的位置,以维持树的平衡性。

3.  AVL树的旋转操作

        如果插入导致不平衡,则需要对以插入路径上离插入节点最近的平衡因子绝对值大于1的节点为根的节点的树进行调整,有以下几种调整方式:

对于下图,如果插入节点7,就是以 节点9 为根路径进行调整:

 

(1)左旋(Left Rotation)

        在某个子树的左子树的左子树上插入新节点,导致根节点的平衡因子由1变成2。

(2)右旋(Right Rotation)

在某个子树的右子树的右子树上插入新节点,导致根节点的平衡因子由-1 变成 -2。

 

 (3)左右旋(Left-Right Rotation)

在某个子树的左子树的右子树上插入新节点,导致根节点的平衡因子由-1 变成 -2。

(4)右左旋(Right-Left Rotation)

在某个子树的右子树的左子树上插入新节点,导致根节点的平衡因子由-1 变成 -2。

4. AVL树的插入

示例:向一棵空的AVL树中插入 1,2,3,4,5,6,7 七个数字:

 (1)插入1,2

(2)插入3,需要右旋

 ——>

 (4)插入4

(5)插入5 ,需要右旋

 ——>

(6)插入6,需要右旋

 ——>

(7)插入7,需要右旋

 ——>

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小印z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值