二叉树采用二叉链表存储,请问如何编写完善递归函数BiTree copy_bin_tree(BiTree bt),复制输入的一棵二叉树 bt ,并返回新二叉树的根结点地址。
/*
// 参考代码
*/
#include
#include
//二叉链表结点结构体
typedef struct BiTNode{
int data;
struct BiTNode * lchild, * rchild;
} BiTNode, * BiTree;
//先序遍历序列建立二叉树的二叉链表
void CreateBinTree(BiTree *T)
{
int ch;
scanf(";\;n%d";,&ch);
if(ch == 0) *T=NULL; // 收到字符0则终止对应分支的创建
else
{ *T=(BiTNode *)malloc(sizeof(BiTNode));
(*T)->data=ch;
CreateBinTree(&(*T)->lchild);
CreateBinTree (&(*T)->rchild);
}
}
// 先序遍历打印结点数据域
void preorder(BiTree bt)
{
if(bt == NULL) return;
printf(";%d\;t";, bt->data);
preorder(bt->lchild);
preorder(bt->rchild);
return;
}
// 销毁二叉树
void destroy_bin_tree(BiTree bt)
{
if(bt == NULL) return;
destroy_bin_tree(bt->lchild);
destroy_bin_tree(bt->rchild);
free(bt);
}
// 拷贝输入的二叉树
BiTree CopyBinTree(BiTree bt)
{
// TODO(10分): 待完善
return 0;
}
void main()
{
BiTree T1;
BiTree T2;
printf(";请按先序遍历输入数值以创建二叉树,输入0代表对应子树为空\;n";);
CreateBinTree(&T1);
printf(";\;n先序遍历打印原始二叉树:\;n";);
preorder(T1);
// 拷贝输入的二叉树
T2 = CopyBinTree(T1);
printf(";\;n先序遍历打印拷贝二叉树:\;n";);
preorder(T2);
// 销毁二叉树
destroy_bin_tree(T1);
destroy_bin_tree(T2);
printf(";\;n完成销毁二叉树\;n";);
return;
}