在计算机科学中,平衡二叉树(Balanced Binary Tree)是一种特殊的二叉搜索树,它能自动保持左右子树的高度差不超过某个固定值(通常为1),从而确保查找、插入和删除操作的时间复杂度始终维持在 O(log n)。其中最经典的实现就是AVL树。本文将用Python从零开始实现一个完整的AVL树,即使你是编程小白,也能轻松理解!
AVL树是以发明者 Adelson-Velsky 和 Landis 命名的自平衡二叉搜索树。它的核心特性是:对于任意节点,其左子树与右子树的高度差(称为“平衡因子”)的绝对值不超过1。
普通的二叉搜索树在最坏情况下(如插入有序序列)会退化成链表,导致操作时间复杂度变为 O(n)。而通过使用Python平衡二叉树(如AVL树),我们可以保证树始终保持“矮胖”状态,从而高效执行各种操作。
AVL树在插入或删除节点后,可能会破坏平衡性。此时需要通过旋转操作来恢复平衡。常见的旋转有四种:
下面我们用Python数据结构的方式一步步构建AVL树。
class AVLNode: def __init__(self, key): self.key = key self.left = None self.right = None self.height = 1 # 新节点初始高度为1 def get_height(node): if not node: return 0 return node.heightdef get_balance_factor(node): if not node: return 0 return get_height(node.left) - get_height(node.right) def rotate_right(y): x = y.left T2 = x.right # 执行旋转 x.right = y y.left = T2 # 更新高度 y.height = 1 + max(get_height(y.left), get_height(y.right)) x.height = 1 + max(get_height(x.left), get_height(x.right)) return x # 新的根节点def rotate_left(x): y = x.right T2 = y.left # 执行旋转 y.left = x x.right = T2 # 更新高度 x.height = 1 + max(get_height(x.left), get_height(x.right)) y.height = 1 + max(get_height(y.left), get_height(y.right)) return y # 新的根节点 def insert(node, key): # 第一步:执行标准BST插入 if not node: return AVLNode(key) if key < node.key: node.left = insert(node.left, key) elif key > node.key: node.right = insert(node.right, key) else: # 不允许重复键 return node # 第二步:更新当前节点的高度 node.height = 1 + max(get_height(node.left), get_height(node.right)) # 第三步:获取平衡因子 balance = get_balance_factor(node) # 第四步:如果失衡,进行旋转 # Left Left Case if balance > 1 and key < node.left.key: return rotate_right(node) # Right Right Case if balance < -1 and key > node.right.key: return rotate_left(node) # Left Right Case if balance > 1 and key > node.left.key: node.left = rotate_left(node.left) return rotate_right(node) # Right Left Case if balance < -1 and key < node.right.key: node.right = rotate_right(node.right) return rotate_left(node) return node def inorder_traversal(root): if root: inorder_traversal(root.left) print(root.key, end=' ') inorder_traversal(root.right) # 创建AVL树root = Nonekeys = [10, 20, 30, 40, 50, 25]for key in keys: root = insert(root, key)print("中序遍历结果(应为升序):")inorder_traversal(root)# 输出:10 20 25 30 40 50 通过以上步骤,我们成功用Python实现了一个完整的AVL树。这种自平衡二叉搜索树能自动维护结构平衡,非常适合需要频繁查找、插入和删除的场景。掌握这一Python数据结构对提升算法能力大有裨益。
希望这篇教程能帮助你理解Python平衡二叉树的核心原理与实现方式。动手敲一遍代码,你会对AVL树有更深刻的认识!
关键词回顾:Python平衡二叉树、AVL树实现、Python数据结构、自平衡二叉搜索树。
本文由主机测评网于2025-12-17发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025128922.html