二叉树采用二叉链表存储,试写出复制一棵二叉树的算法。
话不多说上代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct BiTnode
{
int data;
struct BiTnode* Lchild,*Rchild;
}BiTnode,*BiTree;
void create(BiTree &S)
{
char ch;
char temp;
scanf("%c",&ch);
temp=getchar();
if(ch=='#')
{
S=NULL;
}
else
{
S=(BiTree)malloc(sizeof(BiTnode) );
if(!S)
{
exit(0);
}
else
{
S->data=ch;
create(S->Lchild);
create(S->Rchild);
}
}
return;
}
void Traverse(BiTree T)
{
if(NULL==T)
{
return;
}
else
{
printf("%c ",T->data);
Traverse(T->Lchild);
Traverse(T->Rchild);
}
}
void CopyTree(BiTree S,BiTree &T){
BiTree lptr,rptr;
if (!S) T=NULL;
else{
CopyTree(S->Lchild,lptr); CopyTree(S->Rchild,rptr);
T=(BiTree)malloc(sizeof(BiTnode) );
T->data=S->data;
T->Lchild=lptr;T->Rchild=rptr;
}
}
int main()
{
BiTree T;BiTree S;
printf("创建一个树\n");
create(S);
printf("遍历该树\n");
Traverse(S);
printf("\n");
printf("拷贝该树\n");
CopyTree(S,T);
Traverse(T);
return 0;
}