#include <stdio.h>
#include <stdlib.h>
typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild;//*左右孩子指针
}*BiTree;
void InItBiTree(BiTree *a)//*初始化
{
*a=NULL;
}
void CreateBiTree(BiTree *a)//*插入信息
{
char ch;
scanf("%c",&ch);
fflush(stdin);
if(ch=='#')//*如果ch为"#",则将*a置空
{
*a=NULL;
}
else
{
*a=(struct BiTNode*)malloc(sizeof(struct BiTNode));//*如果ch不为"#",则创建新结点
(*a)->data=ch;
printf("请输入左孩子:\n");
CreateBiTree(&(*a)->lchild);
printf("请输入右孩子:\n");
CreateBiTree(&(*a)->rchild);
}
}
void InOrderTraverse(BiTree a)
{
if(a)//*如果不为NULL
{
InOrderTraverse(a->lchild);
printf("%c\n",a->data);
InOrderTraverse(a->rchild);
}
}
void Copy(BiTree a,BiTree *b)
{
if(!a)
{
*b=NULL;
}
else
{
*b=(struct BiTNode*)malloc(sizeof(struct BiTNode));//*创建新结点
(*b)->data=a->data;//*复制信息
Copy(a->lchild,&(*b)->lchild);//*递归左孩子
Copy(a->rchild,&(*b)->rchild);//*递归右孩子
}
}
int Depth(BiTree a)
{
if(!a)
{
return 0;
}
else
{
int m,n;
m=Depth(a->lchild);
n=Depth(a->rchild);
if(m>n)
{
return (m+1);
}
else
{
return (n+1);
}
}
}
int NodeCount(BiTree a)
{
if(!a)
{
return 0;
}
else
{
return NodeCount(a->lchild)+NodeCount(a->rchild)+1;
}
}
main()
{
BiTree a;
printf("请输入根节点:\n");
InItBiTree(&a);
CreateBiTree(&a);
InOrderTraverse(a);
printf("深度:%d\n所有结点数量:%d\n",Depth(a),NodeCount(a));
BiTree b;
InItBiTree(&b);
Copy(a,&b);
InOrderTraverse(b);
printf("深度:%d\n所有结点数量:%d\n",Depth(b),NodeCount(b));
system("pause");
return 0;
}
程序运行结果如下: