Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;复制二叉树_C++ - Fatal编程技术网

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
函数而不是定义一个复制构造函数?通常,如果定义赋值运算符,还应该定义复制构造函数。此外,当您需要定义深度复制/分配语义时,您应该为涉及的每种类型定义深度复制/分配语义。而且,这段代码充满了内存泄漏。