一、AVL树核心原理:平衡二叉排序树的基石
1. 核心定义与性质
-
平衡因子(Balance Factor, BF):
[ \text{BF}(node) = \text{height}(left_subtree) - \text{height}(right_subtree) ]
要求 ( |\text{BF}(node)| \leq 1 ),否则通过旋转维护平衡。 -
旋转目标:
插入/删除后若出现失衡(BF=±2),通过左旋、右旋、左右双旋、右左双旋调整树结构,恢复平衡。
2. 节点结构定义
# Python实现
class AVLNode:
def __init__(self, key):
self.key = key
self.left = None
self.right = None
self.height = 1 # 节点高度,叶子节点为1
二、关键操作:旋转与平衡调整
1. 基础辅助函数
# Python:获取高度、更新高度、计算平衡因子
def get_height(node):
return node.height if node else 0
def update_height(node):
node.height = 1 + max(get_height(node.left), get_height(node.right))
def get_balance(node):
return get_height(node.left) - get_height(node.right) if node else 0
2. 旋转操作(核心逻辑)
(1)左旋(处理右子树过高,RR型)
def left_rotate(z):
y = z.right # 取右子节点作为新根
T2 =