在该图中,x,y,z是执行旋转的节点,T1,T2,T3,T4是子树。 我已经理解了旋转是如何工作的并且没有任何问题。我遇到的问题是确定树中节点的最终平衡因子。 在旋转之前的第一种情况中,x因子的平衡将是+2或-2(这就是我们执行旋转的原因)。但是y的平衡因子怎么样?为什么它总是被视为+1或-1?为什么它不能为0(T3的高度可以等于z的高度)?我们z的平衡因子是什么?它可以是正确的吗?简而言之,带问号的节点的平衡因子是什么?
这是我想写的代码:
Node insert(Node node, int key)
{
if(node == NULL)
node = new Node(key);
else if (key <= node->key)
{
node->balance++;
node->left = insert(node->left, key);
}
else if (key > node->key)
{
node->balance--;
node->right = insert(node->right, key);
}
// Right Tree Heavy
if (node->balance == -2)
{
/*Do the required rotation and update the balance factor*/
}
// Left Tree Heavy
if (node->balance == 2)
{
/*Do the required rotation and update the balance factor*/
}
return node;
}
编辑:最初树正满足avl树的所有属性。然后将新节点添加到T1或T2,这使得树在节点x处不平衡。任何人都可以解释旋转前后节点平衡因子的所有情况。