拷贝二叉树

拷贝二叉树,就是要拷贝根节点,叶子节点,第一步得先分配一个空间给根节点, BiTNode* newnode = (BiTNode*)malloc(sizeof(BiTNode));将其叶子节点指向NULL,在判断原树的根节点的左节点和右节点是否为空,不为空就得复制过去,利用迭代就很容易做到。最后将新的子节点和根节点链接起来。

typedef struct BiTNode
{
    int data;
    struct BiTNode* lchild, *rchild;
}BiTNode;
 

BiTNode* CopyTree(BiTNode *root)
{
    if (root == NULL)
    {
        return NULL;
    }
    BiTNode* newnode = (BiTNode*)malloc(sizeof(BiTNode));
    BiTNode* newlc = NULL;
    BiTNode* newrc = NULL;
    newnode->data = root->data;//拷贝根节点
    if (root->lchild != NULL)
    {
        //拷贝左子树
        newlc = CopyTree(root->lchild);
    }
    else
    {
        newlc = NULL;
    }
    if (root->rchild != NULL)
    {
        //拷贝右子树
        newrc = CopyTree(root->rchild);
    }
    else
    {
        newrc = NULL;
    }
    newnode->lchild = newlc;
    newnode->rchild = newrc;
    return newnode;
}
void main()
{
    BiTNode t1, t2, t3, t4, t5;
    memset(&t1, 0, sizeof(BiTNode));
    memset(&t2, 0, sizeof(BiTNode));
    memset(&t3, 0, sizeof(BiTNode));
    memset(&t4, 0, sizeof(BiTNode));
    memset(&t5, 0, sizeof(BiTNode));

    t1.data = 1;
    t2.data = 2;
    t3.data = 3;
    t4.data = 4;
    t5.data = 5;

    t1.lchild = &t2;
    t1.rchild = &t3;
    t2.rchild = &t4;
    t3.lchild = &t5;
    inOrder(&t1);
    printf("\n");
    BiTNode *newn=CopyTree(&t1);
    inOrder(newn);
    system("pause");

}

猜你喜欢

转载自blog.csdn.net/qianyayun19921028/article/details/81154541