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

Is it possible to copy a binary search tree by only passing a pointer as a parameter?

本文关键字:参数 复制 搜索树 指针 是否      更新时间:2023-10-16

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

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。

是否可以

使用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,这应该是对您的问题的直接解释。