C++ c++;复制二叉树
如果我用这个来复制一个二叉树C++ c++;复制二叉树,c++,C++,如果我用这个来复制一个二叉树 BTNode<ElemType>* BinaryTree<ElemType>::_Copy( BTNode<ElemType>* T){ if (T == NULL){ return NULL; } BTNode<ElemType> *p; p = new BTNode<ElemType>; p->data = T->data;
BTNode<ElemType>* BinaryTree<ElemType>::_Copy( BTNode<ElemType>* T){
if (T == NULL){
return NULL;
}
BTNode<ElemType> *p;
p = new BTNode<ElemType>;
p->data = T->data;
p->lchild = _Copy(T->lchild);
p->rchild = _Copy(T->rchild);
return p;
}
然后,如果我有两个树型元素tree\u 1
和tree\u 2
当我这样做的时候
tree_2 = tree_1;
我将所有元素从树1
复制到树2
。
此时,我向树2
添加了一个新节点。树1
也将更改。
如何设置一个新的递归复制函数,使
树1
保持不变,只更改树2
的结构?只覆盖节点元素BTNode=operator
这就是根拷贝的工作方式
复制树时[tree_2=tree_1;]
你使用的是C++提供的DeFult拷贝cor 使用按位复制(深度复制)的 您需要创建一个副本 对于使用foreach节点的树 您真正实现的“=”运算符
node *Cpy( root ) {
if (root == NULL ) : return root;
node *temp = new node();
temp->data = root-> data;
temp->left = Cpy( root -> left);
temp->right = Cpy(root -> right);
return temp;
}
您只覆盖节点元素BTNode=operator 这就是根拷贝的工作方式 复制树时[tree_2=tree_1;]
你使用的是C++提供的DeFult拷贝cor 使用按位复制(深度复制)的 您需要创建一个副本 对于使用foreach节点的树 您真正实现的“=”运算符
node *Cpy( root ) {
if (root == NULL ) : return root;
node *temp = new node();
temp->data = root-> data;
temp->left = Cpy( root -> left);
temp->right = Cpy(root -> right);
return temp;
}
你应该试着提高你答案中的英语水平。至少使用
共享\u ptr
或其他什么。这会像疯了一样泄露出去。另外,默认的复制构造函数不是深度复制。我只是想帮你,你应该试着提高你答案中的英语水平。至少使用共享\u ptr
或其他什么。这会像疯了一样泄露出去。另外,默认的复制构造函数不是深度复制。我只是想帮助你为什么要定义一个\u copy
函数而不是定义一个复制构造函数?通常,如果定义赋值运算符,还应该定义复制构造函数。此外,当您需要定义深度复制/分配语义时,您应该为涉及的每种类型定义深度复制/分配语义。此外,此代码充满内存泄漏。为什么要定义一个\u Copy
函数而不是定义一个复制构造函数?通常,如果定义赋值运算符,还应该定义复制构造函数。此外,当您需要定义深度复制/分配语义时,您应该为涉及的每种类型定义深度复制/分配语义。而且,这段代码充满了内存泄漏。