【数据结构】递归实现二叉树的拷贝

#include "pch.h"
#include <iostream>
#include <stdlib.h>
#include <string.h>

using namespace std;
struct tNode
{
    int data;
    struct tNode *lChild, *rChild;
};
typedef struct tNode tNode;
typedef struct tNode* Tree;
//先序遍历
void preOrder(tNode* root)//树的根节点
{
    if (root == NULL) return;
    printf("%d ", root->data);
    preOrder(root->lChild);
    preOrder(root->rChild);

}
//二叉树的拷贝函数
tNode * copyTree(tNode * T)
{
    tNode * newT = NULL;
    tNode * newL = NULL;
    tNode * newR = NULL;
    if (T == NULL) return NULL;
    if (T->lChild == NULL) newL = NULL;
    else
    {
        newL = copyTree(T->lChild);//左子树拷贝
    }
    if (T->rChild == NULL) newR = NULL;
    else
    {
        newR = copyTree(T->rChild);//右子树拷贝
    }

    newT = (tNode *)malloc(sizeof(tNode));//为新的根节点分配内存
    newT->lChild = newL;
    newT->rChild = newR;
    newT->data = T->data;

    return newT;

}

void main()
{
    tNode p1, p2, p3, p4, p5, p6;
    tNode * newT;
    memset(&p1, 0, sizeof(tNode));
    memset(&p2, 0, sizeof(tNode));
    memset(&p3, 0, sizeof(tNode));
    memset(&p4, 0, sizeof(tNode));
    memset(&p5, 0, sizeof(tNode));
    memset(&p6, 0, sizeof(tNode));
    memset(&newT, 0, sizeof(tNode));

    p1.data = 1;
    p2.data = 2;
    p3.data = 3;
    p4.data = 4;
    p5.data = 5;
    p6.data = 6;

    p1.lChild = &p2;
    p1.rChild = &p3;
    p2.lChild = &p4;
    p3.lChild = &p5;
    p3.rChild = &p6;

    printf("先序遍历:");
    preOrder(&p1);
    printf("\n");

    printf("复制二叉树并做先序遍历:");
    newT = copyTree(&p1);
    preOrder(newT);

    system("pause");
    return;
}

猜你喜欢

转载自blog.csdn.net/qq_32778575/article/details/82119922