是否可以通过仅将指针作为参数传递来复制二叉搜索树?

时间:2018-05-06 21:19:53

标签: c++ binary-search-tree

对于作业,我正在编写一个带有辅助函数的复制构造函数。

binarytree::binarytree(binarytree& right) {
    copy(root, right.root);
}

我的复制功能:

void binarytree::copy(treenode*& copyRoot, const treenode* root) {  

    if (root != nullptr) {
        //copy data

        //copy left
        copy(copyRoot->left, root->left);

        //copy right
        copy(copyRoot->right, root->right);
}

到目前为止,它的目的是制作BST的副本。但是,我的赋值指定函数将是static,void,并且有两个treenode *参数。是否可以使用treenode* copyRoot作为参数而不是treenode*& copyRoot来重写此功能?

如果我按原样更改功能参数,则不会保存该功能的副本,并且在测试时打印出空的BST。

1 个答案:

答案 0 :(得分:0)

  

是否可以使用treenode * copyRoot作为参数而不是treenode *&重写此功能。 copyRoot?

我假设binarytree::copy()的目标是创建treenode的新副本(行copyRoot = new treenode();建议它),所以对于这种情况......

不,你不能这样做。

通过treenode*& copyRoot参数声明你是"返回"指针,而treenode* copyRoot表示您正在向copy()方法传递指针,而在copy()方法中的结果实际上你有另一个这个指针的副本。

此案例的最佳说明是void cpy(int& i)void cpy(int i)方法。后一种情况并没有改变传递给方法的int。现在将int替换为int*,这对您的问题应该是非常直接的解释。