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