按顺序复制二叉树

时间:2010-10-12 20:36:19

标签: 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);
    }
}

我不知道如何将节点的父节点链接到节点。

5 个答案:

答案 0 :(得分:3)

我认为会是这样的。

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);
    }
}

答案 1 :(得分:3)

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

alt text

  1. copyTree创建一个节点,并将值2复制到其中
  2. 如果orgTree->left != NULL,请致电copyInOrder( orgTree->left, copyTree->left );
  3. 如果orgTree->right != NULL,请致电copyInOrder( orgTree->right, copyTree->right );
  4. BTW,这种类型的遍历被称为pre-order traversa l,有序遍历是不同的。

答案 2 :(得分:3)

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;
 }

答案 3 :(得分:0)

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

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;
        }
}

答案 4 :(得分:0)

我无权举报或发表评论。也许获得授权的人会对被劫持的链接采取行动。然后,也许删除我的帖子(此帖子),因为它不再相关。

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

我检查了链接(即右键单击,然后单击“检查”)。该 URL 看起来合法。然而,当我真正点击链接时,我被重定向到一个完全不同的网站 URL,该网站想要下载和安装插件。 Norton Security 会阻止该网站。在我看来,原始链接似乎被劫持了。

原帖展示了知识和帮助。

为了安全起见,或许我们应该改用google搜索词“预购遍历”。

相关问题