AVL树中高度平衡的难度

时间:2018-03-30 04:22:04

标签: data-structures binary-search-tree avl-tree

enter image description here

在该图中,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处不平衡。任何人都可以解释旋转前后节点平衡因子的所有情况。

0 个答案:

没有答案