在计算机科学中,AVL树是一种自平衡二叉搜索树,由G.M. Adelson-Velsky和E.M. Landis于1962年提出。它的核心思想是:通过维护每个节点的平衡因子(左右子树高度差),确保整棵树的高度始终保持在 O(log n),从而保证查找、插入和删除操作的时间复杂度为 O(log n)。
本教程将手把手教你用 C++ 语言实现 AVL 树,包括节点定义、旋转操作、插入逻辑等关键部分。即使你是编程小白,也能轻松理解!
AVL树是一种特殊的平衡二叉搜索树。它满足以下两个条件:

当插入或删除节点导致某节点的平衡因子超出 [-1, 1] 范围时,就需要通过旋转来恢复平衡。共有四种情况:
struct AVLNode { int data; AVLNode* left; AVLNode* right; int height; // 节点高度 AVLNode(int val) : data(val), left(nullptr), right(nullptr), height(1) {}};int getHeight(AVLNode* node) { if (node == nullptr) return 0; return node->height;}int getBalanceFactor(AVLNode* node) { if (node == nullptr) return 0; return getHeight(node->left) - getHeight(node->right);}// 右旋(用于LL情况)AVLNode* rotateRight(AVLNode* y) { AVLNode* x = y->left; AVLNode* T2 = x->right; x->right = y; y->left = T2; // 更新高度 y->height = max(getHeight(y->left), getHeight(y->right)) + 1; x->height = max(getHeight(x->left), getHeight(x->right)) + 1; return x; // 新的根节点}// 左旋(用于RR情况)AVLNode* rotateLeft(AVLNode* x) { AVLNode* y = x->right; AVLNode* T2 = y->left; y->left = x; x->right = T2; x->height = max(getHeight(x->left), getHeight(x->right)) + 1; y->height = max(getHeight(y->left), getHeight(y->right)) + 1; return y; // 新的根节点}AVLNode* insert(AVLNode* node, int key) { // 1. 执行标准BST插入 if (node == nullptr) return new AVLNode(key); if (key < node->data) node->left = insert(node->left, key); else if (key > node->data) node->right = insert(node->right, key); else return node; // 不允许重复值 // 2. 更新当前节点高度 node->height = 1 + max(getHeight(node->left), getHeight(node->right)); // 3. 获取平衡因子 int balance = getBalanceFactor(node); // 4. 如果不平衡,进行旋转 // Left Left Case if (balance > 1 && key < node->left->data) return rotateRight(node); // Right Right Case if (balance < -1 && key > node->right->data) return rotateLeft(node); // Left Right Case if (balance > 1 && key > node->left->data) { node->left = rotateLeft(node->left); return rotateRight(node); } // Right Left Case if (balance < -1 && key < node->right->data) { node->right = rotateRight(node->right); return rotateLeft(node); } // 无需旋转,返回原节点 return node;}通过以上步骤,你已经掌握了如何用 C++ 实现 AVL 树。AVL树作为经典的自平衡二叉树结构,在数据库索引、内存管理等领域有广泛应用。理解其旋转机制是掌握高级数据结构的关键一步。
记住四个关键词:AVL树实现、C++ AVL树、平衡二叉搜索树、自平衡二叉树——它们不仅是面试高频考点,也是构建高效程序的基础。
建议你动手编写完整代码,并测试各种插入顺序,观察树如何自动保持平衡。实践出真知!
本文由主机测评网于2025-12-23发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/20251211768.html