在AVL树中,调整是为了保持树的平衡性,主要涉及以下四种不平衡情况,每种情况对应特定的旋转操作来恢复平衡。具体情况如下:
特征:在插入时,某个节点的左子树的左子节点导致不平衡。
结构:
A / B / C
调整:执行右旋转。
操作:
将 B 提升为新的根节点,A 变为 B 的右子节点。
B
A
特征:在插入时,某个节点的右子树的右子节点导致不平衡。
A \ B \ C
调整:执行左旋转。
将 B 提升为新的根节点,A 变为 B 的左子节点。
特征:在插入时,某个节点的左子树的右子节点导致不平衡。
调整:先对 B 左旋,然后对 A 右旋。
先将 C 提升为 B 的父节点,再将 C 提升为新的根节点。
C
特征:在插入时,某个节点的右子树的左子节点导致不平衡。
调整:先对 B 右旋,然后对 A 左旋。
插入或删除节点后:每次插入或删除操作后,都需要从当前节点开始向上更新高度,并检查每个节点的平衡因子。
选择适当的旋转:根据平衡因子的值判断采取的旋转操作:
LL:右旋
RR:左旋
LR:先左旋后右旋
RL:先右旋后左旋
以插入节点 30, 10, 20 为例,展示LR情况的调整:
30, 10, 20
插入 30:
30
插入 10:
10
插入 20(造成LR不平衡):
20
调整步骤:
对 10 左旋:
对 30 右旋:
AVL树的调整机制确保在每次插入或删除操作后,树的平衡性能够得到维护。通过合理的旋转操作,AVL树能够始终保持对数时间复杂度的高效性能。
Last updated 1 year ago
A / B \ C
A \ B / C
30 / 10
30 / 10 \ 20
30 / 20 / 10
20 / \ 10 30