二叉树中的运算符重载

时间:2016-04-22 17:26:12

标签: c++ tree operator-overloading binary-tree

我正在为我正在创建的二叉树函数编写各种运算符重载,规范需要重载才能将一棵树复制到另一棵树。

binary_tree& binary_tree::operator=(const binary_tree &other)
{

return binary_tree();
}

操作员的工作测试如下,

int main(int argc, char **argv)
{
tree = new binary_tree(vector<int>{11, 5, 3, 7});
binary_tree temp = *tree;
temp.insert(12);
str = temp.inorder();
if (str != string("3 5 7 11 12") && temp.inorder() != tree->inorder())
    cerr << "test failed (assignment operator)" << endl;
else
    cout << "test passed (assignment operator)" << endl;
}

显然,这个测试的目的是创建一个新的树temp,它具有原始值,但我似乎无法使它工作,所以当调用.insert(12)时,它不会'改变原始树。操作员必须根据未经编辑的主要测试工作。

我在=运算符中尝试了各种各样的东西,但它们似乎都没有任何效果。我有像

这样的方法
void binary_tree::copyTree(node *& tree2, node *& tree)
{   
if(tree == NULL)
{
    tree2 = NULL;
}
else
{
    tree2 = new node;
    tree2->data = tree->data;

    copyTree(tree2->left, tree->left);
    copyTree(tree2->right, tree->right);
}
}

但使用它们似乎没有做任何有用的事情。

1 个答案:

答案 0 :(得分:2)

如果尝试通过引用返回运算符的本地对象

,则所有尝试都将失败
binary_tree& binary_tree::operator=(const binary_tree &other)
{
    ...
    return binary_tree();    // <=== ouch:  the reference will be invalid !
}

对于赋值运算符,您最好返回当前树的引用:

binary_tree& binary_tree::operator=(const binary_tree &other)
{
    ...            // make your copy here 
    return *this;  
}

现在要实施您的复制,您可以考虑重复使用binary_tree::copyTree()。假设你的树中有node* root,它就像是:

binary_tree& binary_tree::operator=(const binary_tree &other)
{
    copyTree (root, other.root);  
    return *this;  
}