当前位置:首页 > CN2资讯 > 正文内容

C++ AVL树实现详解:从基础插入到性能优化的完整指南

2天前CN2资讯

struct AVLNode {

int key;
string value;
AVLNode* left;
AVLNode* right;
int balance_factor; // height(left) - height(right)

AVLNode(int k, string v) : key(k), value(v), 
                          left(nullptr), right(nullptr),
                          balance_factor(0) {}

};

AVLNode insert(AVLNode node, int key, string value) {

// 标准BST插入
if (!node) return new AVLNode(key, value);

if (key < node->key)
    node->left = insert(node->left, key, value);
else
    node->right = insert(node->right, key, value);

// 更新当前节点平衡因子
node->balance_factor = getHeight(node->left) - getHeight(node->right);

// 检查失衡并旋转
if (node->balance_factor > 1) {
    if (key < node->left->key) // LL型
        return rightRotate(node);
    else { // LR型
        node->left = leftRotate(node->left);
        return rightRotate(node);
    }
}
else if (node->balance_factor < -1) {
    if (key > node->right->key) // RR型
        return leftRotate(node);
    else { // RL型
        node->right = rightRotate(node->right);
        return leftRotate(node);
    }
}
return node;

}

struct OptimizedAVLNode {

int key;
string value;
int8_t balance; // -2~2足够应对所有情况
OptimizedAVLNode* left;
OptimizedAVLNode* right;

};

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/17068.html

    分享给朋友:

    “C++ AVL树实现详解:从基础插入到性能优化的完整指南” 的相关文章