Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.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++_Tree - Fatal编程技术网

C++ 按顺序复制二叉树

C++ 按顺序复制二叉树,c++,tree,C++,Tree,到目前为止,我编写的代码是: void copyInOrder(TNode *orgTree, Tnode *& copyTree){ if(orgTree !=NULL){ copyInOrder(orgTree->left_link); //create leftmost node of tree but how to link to parent copyInOrder(orgTree->right_link);

到目前为止,我编写的代码是:

void copyInOrder(TNode *orgTree, Tnode *& copyTree){
    if(orgTree !=NULL){
        copyInOrder(orgTree->left_link);
        //create leftmost node of tree but how to link to parent
        copyInOrder(orgTree->right_link);
    }
}

我不知道如何将父节点作为其索引链接到节点。

我想应该是这样的

void copyInOrder(TNode *orgTree, Tnode *& copyTree){
    if(orgTree !=NULL){
        //left side
        TNode newLeftNode = cloneNode(orgTree->left_link);
        copyTree->left_link = newLeftNode;
        copyInOrder(orgTree->left_link, copyTree->left_link);

        //right side
        TNode newRightNode = cloneNode(orgTree->right_link);
        copyTree->right_link = newRightNode;
        copyInOrder(orgTree->right_link, copyTree->right_link);
    }
}

我想应该是这样的

void copyInOrder(TNode *orgTree, Tnode *& copyTree){
    if(orgTree !=NULL){
        //left side
        TNode newLeftNode = cloneNode(orgTree->left_link);
        copyTree->left_link = newLeftNode;
        copyInOrder(orgTree->left_link, copyTree->left_link);

        //right side
        TNode newRightNode = cloneNode(orgTree->right_link);
        copyTree->right_link = newRightNode;
        copyInOrder(orgTree->right_link, copyTree->right_link);
    }
}

假设
orgTree
指向根(
2
)。对于复制,我们必须执行以下操作:

  • copyTree
    处创建一个节点,并将值2复制到其中
  • 如果
    orgTree->left!=NULL
    ,调用
    copyInOrder(orgTree->left,copyTree->left)
  • 如果
    orgTree->right!=NULL
    ,调用
    copyInOrder(orgTree->right,copyTree->right)

  • 顺便说一句,这种类型的遍历称为,顺序不同。

    假设
    orgTree
    指向根(
    2
    )。对于复制,我们必须执行以下操作:

    tnode *copy(tnode *root) {
         tnode *new_root;
         if(root!=NULL){
             new_root=new tnode;
             new_root->data=root->data;
             new_root->lchild=copy(root->lchild);
             new_root->rchild=copy(root->rchild);
         } else return NULL;
         return new_root;
     }
    

  • copyTree
    处创建一个节点,并将值2复制到其中
  • 如果
    orgTree->left!=NULL
    ,调用
    copyInOrder(orgTree->left,copyTree->left)
  • 如果
    orgTree->right!=NULL
    ,调用
    copyInOrder(orgTree->right,copyTree->right)

  • 顺便说一句,这种类型的遍历被称为,因为遍历的顺序不同。

    这是一种递归方法,有效且简单

    tnode *copy(tnode *root) {
         tnode *new_root;
         if(root!=NULL){
             new_root=new tnode;
             new_root->data=root->data;
             new_root->lchild=copy(root->lchild);
             new_root->rchild=copy(root->rchild);
         } else return NULL;
         return new_root;
     }
    
    Tnode* CopyInOrder(Tnode* root){
        if(root == NULL){return NULL;}
        else{
            Tnode* temp = new Tnode;
            temp -> data = root -> data;
            temp -> left = copyInOrder(root -> left);
            temp -> right = copyInOrder(root -> right);
            return temp;
            }
    }
    

    这是一种有效且简单的递归方法

    Tnode* CopyInOrder(Tnode* root){
        if(root == NULL){return NULL;}
        else{
            Tnode* temp = new Tnode;
            temp -> data = root -> data;
            temp -> left = copyInOrder(root -> left);
            temp -> right = copyInOrder(root -> right);
            return temp;
            }
    }
    

    我无权标记或评论。也许有授权的人会对被劫持的链接采取行动。然后,可能会删除我的帖子(这篇帖子),因为它将不再相关

    参考Arun于10月12日21:02发布的帖子:

    我检查了链接(即,右键单击,然后单击“检查”)。该URL看起来是合法的。然而,当我实际点击链接时,我会被重定向到一个完全不同的网站URL,该网站想要下载并安装插件。诺顿安全公司封锁了网站。在我看来,原来的链接似乎被劫持了

    原来的帖子显示了知识和帮助


    为了安全起见,也许我们应该将搜索词“预订单遍历”改为谷歌搜索。

    我无权标记或评论。也许有授权的人会对被劫持的链接采取行动。然后,可能会删除我的帖子(这篇帖子),因为它将不再相关

    参考Arun于10月12日21:02发布的帖子:

    我检查了链接(即,右键单击,然后单击“检查”)。该URL看起来是合法的。然而,当我实际点击链接时,我会被重定向到一个完全不同的网站URL,该网站想要下载并安装插件。诺顿安全公司封锁了网站。在我看来,原来的链接似乎被劫持了

    原来的帖子显示了知识和帮助


    为了安全起见,也许我们应该将搜索词“预排序遍历”改为谷歌搜索。

    克隆节点的定义在哪里?@user432495我没有写它,但它将是一个基于另一个节点的数据创建新节点的方法。克隆节点的定义在哪里?@user432495我没有写它,但这将是一种基于另一个节点的数据创建新节点的方法。