#include <stdlib.h>
#include <stdio.h>
#include <string.h>
//二叉链表示法
typedef struct BiTNode
{
int data;
struct BiTNode *lchild,*rchild;
}BiTNode;
void inOrder(BiTNode *root)//中序遍历(先遍历左子树然后遍历根最后遍历右子树)
{
if(root==NULL)
{
return ;
}
inOrder(root->lchild);//遍历左子树
printf("%d ",root->data);//访问根节点
inOrder(root->rchild);//遍历右子树
}
BiTNode* CopyTree(BiTNode* root)//拷贝树
{
BiTNode* newNode=NULL;
BiTNode* newLp=NULL;
BiTNode* newRp=NULL;
if(root==NULL)
{
return NULL;
}
if(root->lchild!=NULL)
{
newLp=CopyTree(root->lchild);//拷贝左子树
}
else
{
newLp=NULL;
}
if(root->rchild !=NULL)
{
newRp=CopyTree(root->rchild );//拷贝右子树
}
else
{
newRp=NULL;
}
//malloc根节点
newNode=(BiTNode*)malloc(sizeof(BiTNode));
if(newNode==NULL)
{
return NULL;
}
newNode->lchild=newLp;
newNode->rchild=newRp;
newNode->data=root->data;
return newNode;
}
//释放开辟的树的结点
void FreeTree(BiTNode* root)
{
if(root==NULL)
{
return ;
}
if(root->lchild!=NULL)
{
FreeTree(root->lchild);
root->lchild=NULL;
}
if(root->rchild!=NULL)
{
FreeTree(root->rchild);
root->rchild=NULL;
}
if(root!=NULL)
{
free(root);
root=NULL;
}
}
int main()
{
int height=0;
BiTNode t1,t2,t3,t4,t5;
BiTNode *pt;
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.lchild=&t4;
t3.rchild=&t5;
printf("中序遍历:");
inOrder(&t1);
printf("\n");
pt=CopyTree(&t1);
printf("调用函数CopyTree()之后:");
inOrder(pt);
printf("\n");
FreeTree(pt);
return 0;
}