#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
今日推荐
周排行