我被卡在我的作业上,该作业指示在将整数插入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。
但是我没有得到正确的输出。