推荐可视化插入、删除节点的二叉树网站:AVL Tree Visualzation (usfca.edu)
1. 概述
AVL树是一种自平衡二叉搜索树,他是搜索二叉树(BST)的优化,它在每次插入或删除操作后,通过旋转节点来保持树的平衡性。AVL树的平衡条件是任意节点的左子树和右子树的高度差(平衡因子p)不超过1,即平衡因子可以是-1、0或1。
p =Height(Tl) - Height(Tr)
2. AVL树的特点
- 平衡性:AVL树的平衡性保证了查找、插入和删除操作的时间复杂度为O(log n),其中n是树中节点的数量。
- 自平衡操作:当进行插入或删除操作时,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,需要右旋
——>