是否可以仅通过传递指针作为参数来复制二叉搜索树?
Is it possible to copy a binary search tree by only passing a pointer as a parameter?
对于赋值,我正在编写一个带有辅助函数的复制构造函数。
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*©Root重写此函数?
我假设binarytree::copy()
的目标是创建treenode
的新副本(copyRoot = new treenode();
行建议),所以在这种情况下......
不,你不能那样做。
通过treenode*& copyRoot
参数语句,您正在"返回"指针,而treenode* copyRoot
意味着您正在传递指向copy()
方法的指针,并且在该方法内部的结果实际上是copy()
您拥有此指针的另一个副本。
这种情况的最佳说明是void cpy(int& i)
和void cpy(int i)
方法。后一种情况不会更改传递给方法的 int。现在用int*
替换int
,这应该是对您的问题的直接解释。
相关文章:
- 当从函数参数中的临时值调用复制构造函数时
- 如果有一个模板构造函数只有一个泛型参数,为什么我必须有一个复制构造函数
- 为什么默认复制函数在按值发送参数时不调用?
- std::p ackaged_task 应该删除带有 const 参数的复制 c'tor
- 将参数传递给泛型 lambda 时复制构造函数不正确
- 如何确定捕获不可复制参数的 lambda 的类型?
- 复制 avcodec 参数
- 从函数参数 [C++] 复制整数数组
- 候选构造函数(隐式复制构造函数)不可行:第一个参数需要 l 值
- 使用另一个类中的参数复制构造函数
- 在 c++ 中从参数复制本地数组比从数组更快?
- 是否可以避免将参数复制到 lambda 函数?
- 可以使用默认参数复制包含 lambda 的 std::函数吗?
- C 指针节点帮助 - 将参数复制到链接的列表节点更改该节点的不同部分
- gcc 的 std::bind 在源中的哪个位置将参数复制到数据结构中?
- std::绑定参数复制行为
- 使用参数复制构造函数作为对派生类的引用
- 将指针类参数复制到类成员的好处
- 使用 2 参数复制构造函数
- 函数参数:复制或指针