首页 > 解决方案 > 是否可以仅通过将指针作为参数传递来复制二叉搜索树?

问题描述

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

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 的副本。但是,我的分配指定该函数将是静态的、无效的,并且有两个 treenode* 参数。是否可以使用treenode* copyRoot作为参数而不是重写此函数treenode*& copyRoot

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

标签: c++binary-search-tree

解决方案


是否可以使用 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 。现在替换intint*,这应该是对您的问题的非常直接的解释。


推荐阅读