AVL树重新平衡

时间:2013-12-22 17:31:05

标签: c++ avl-tree

我的AVL树的函数重新平衡(节点*)有问题。这个函数在大多数示例中运行良好,但在某些情况下失败,例如当我尝试获取node-> left->左键时,当node-> left == NULL时。

TAVLStabla
void AVLStabloMapa<Tkljuca, Tvrijednosti>::rebalansiraj(Node* temp) {
    while(temp != 0) {
        updateHeight(temp);
        if(height(temp->l) >= 2 + height(temp->d)) {
            if(height(temp->l->l) >= height(temp->d->d))
                rightRot(temp);
            else {
                rightRot(temp->d);
                leftRot(temp);
            }
        }
        else if(height(temp->d) >= 2 + height(temp->l)) {
            if(height(temp->d->d) >= height(temp->d->l))
                leftRot(temp);
            else {
                rightRot(temp->d);
                leftRot(temp);
            }
        }
                temp = temp->r;
    }
}

0 个答案:

没有答案
相关问题