AVL树平衡因子:指示不平衡

时间:2019-11-24 06:08:24

标签: avl-tree

我被卡在我的作业上,该作业指示在将整数插入AVL树时出现不平衡的地方。当不平衡发生时,我不需要平衡树。

int insertNode(Node *&tp, int nv, Node *allNodes[], int allNodesN) {
    Node *newp;

    if (tp == 0) {
        // Setup our new node
        newp = new Node;
        newp->val = nv;
        newp->bf = 0;
        newp->left = 0;
        newp->right = 0;
        tp = newp;
        allNodes[allNodesN] = newp;
        return (1);
    }

    // Ignore existing values
    if (nv == tp->val)
        return (0);

    if (nv < tp->val) {
        // Insert into the LEFT subtree
        int delta = insertNode(tp->left, nv);
        if (delta == 0) return 0;
        else if (delta == -1)
            return -1;
        else {
            switch (tp->bf)
            {
                case +1 : 
                    tp->bf += 1; 
                    cout << tp->val << "Imbalanced" << endl;
                    return -1;
                case 0 : tp->bf += 1; return +1;
                case -1 : tp->bf = 0; return 0;
            }
        }
    } 
    else 
    { 
        // Insert into the RIGHT subtree
        int delta = insertNode(tp->right, nv);
        if (delta == 0) return 0;
        else if (delta == -1)
            return -1;
        else
        {
            switch (tp->bf)
            {
                case -1 : 
                    tp->bf -= 1; 
                    cout << tp->val << "Imbalanced" << endl;
                    return -1;
                case 0 : tp->bf += 1; return +1;
                case +1 : tp->bf += 1; return 0;
            }
        }
    }
}

这是我的插入功能。我正在尝试将节点插入到avl树中。我的根声明为:

    Node *rootp = 0;

这是我的结构:

struct Node {
    int val;      // The (integer) value
    int bf;       // Balance factor of this node
    Node *left;   // Left child pointer
    Node *right;  // Right child pointer
};

在我的插入函数中,我定义了一个增量,以便如果树向左向下遍历并且左重(如果插入节点,平衡因子将为2),则其值为-1。对于右沉的情况也一样,如果树向右下横越并且沉重,则为-1。

但是我没有得到正确的输出。

0 个答案:

没有答案