以递归方式平衡BST

时间:2015-11-17 17:55:15

标签: c++ recursion binary-search-tree tree-balancing

我有一类BST。我需要一个递归函数Rotate,它将BST的根作为参数并返回一个平衡的BST。

附加的是仅平衡一个节点的代码,但它不适用于根节点。

我想让它递归,所以它平衡了整个树而不是单个节点。

/* rotate */
Node* BST :: Rotate(Node* root)
{
    // gets the balance factor
    int balance = getBalance(root);

    // 4 cases for unbalanced BST

    // Left Left Case
    if (balance > 1 && root->data < root->left->data)
        return rightRotate(root);

    // Right Right Case
    if (balance < -1 && root->data > root->right->data)
        return leftRotate(root);

    // Left Right Case
    if (balance > 1 && root->data > root->left->data)
    {
        root->left =  leftRotate(root->left);
        return rightRotate(root);
    }

    // Right Left Case
    if (balance < -1 && root->data < root->right->data)
    {
        root->right = rightRotate(root->right);
        return leftRotate(root);
    }

    /* return the (unchanged) node pointer */
    return root;
}

0 个答案:

没有答案