函数重新平衡二叉搜索树

时间:2015-04-30 22:43:07

标签: c++ binary-search-tree

我正在努力实现二叉搜索树。完成实现所需的功能之一是重新平衡功能。

根据规范,该功能按以下方式工作:

  

rebalance()方法应创建一个平衡树,从而将偏度降低到零。一个   平衡树是左右子树的大小相差不超过1的树,   整个树(即每个子树也是平衡的)。

     

要平衡树,rebalance()方法应重复将根值移动到较小的值   子树,并将最小/最大值从较大的子树移动到根,直到树平衡。   然后应该递归地平衡两个子树。

到目前为止,我有以下代码:

    struct treeNode {
    Type value;
    int count;
    treeNode* left;
    treeNode* right;
    };
    treeNode* root;

template <class Type>
void bstree<Type>::rebalance(treeNode* sroot){

    if (root == NULL) {
        throw new underflow_error("tree is empty");
    }

    while (skewness(sroot) != 0)
    {
        if (size(sroot->left) < size(sroot->right))
        {
            sroot->left.insert(sroot->value);
            sroot->left.insert(max(sroot->right));
            sroot->left.insert(min(sroot->right));

        }
        else
        {
            sroot->right.insert(sroot->value);
            sroot->left.insert(max(sroot->left));
            sroot->left.insert(min(sroot->left));
        }
    }

    rebalance(sroot->left);
    rebalance(sroot->right);
}

我无法判断我是否正确遵守了规格。我可以获得一些见解或指示,因为我可能做错了吗?

0 个答案:

没有答案