#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef int Status;
typedef struct BiTNode
{
ElemType data;
struct BiTNode *lchild;*rchild ;
}
BiTNode, *BiTree;
Status CreateBiTree(BiTree *T)
{
ElemType ch;
ElemType temp;
scanf("%d", &ch);
temp = getchar();
if (-1 == ch)
*T = NULL;
else
{
*T = (BiTree)malloc(sizeof(BiTNode));
if (!(*T))
exit(-1);
(*T)->data = ch;
printf("输入%d 的左子节点:", ch);
CreateBiTree(&(*T)->lChild);
printf("输入%d 的右子节点:", ch);
CreateBiTree(&(*T)->rChlid);
}
return 1;
}
void PreOrderBiTree(BiTree T)
{
if (NULL == T)
return ;
printf("%d",T->data);
PreOrBiTree(T->Lchild);
PreOrBiTree(T->Rchild);
}
void InOrderBiTree(BiTree T)
{
if (NULL == T)
return ;
InOrderBiTree(T->Lchild);
printf("%d",T->data);
InOrderBiTree(T->Rchild);
}
void PostOrderBiTree(BiTree T)
{
if (NULL == T)
return ;
PostOrderBiTree(T->Lchild);
PostOrderBiTree(T->Rchild);
printf("%d",T->data);
}
int TreeDeep(BiTree T)
{
int deep = 0;
if(T)
{
int leftdeep = TreeDeep(T->lChild);
int rightdeep = TreeDeep(T->rChlid);
deep = leftdeep>=rightdeep?leftdeep+1:rightdeep+1;
}
return deep;
}
int Leafcount(BiTree T,int num)
{
if(T)
{
if(T->lChild ==NULL &&T->rChlid==NULL)
count++;
Leafcount(T->lChild,num);
Leafcount(T->rChlid,num);
}
return num;
}
int main(void)
{
BiTree T;
BiTree p =(BiTree)malloc(sizeof(BiTree));
int deepth,num=0;
printf("请输入第一个结点的值,-1 表示没有叶结点:\n");
CreateBiTree(&T);
printf("先序遍历二叉树:\n");
PreOrderBiTree(T);
printf("\n");
printf("中序遍历二叉树:\n");
InOrderBiTree(T);
printf("\n");
printf("后序遍历二叉树:\n");
PostOrderBiTree(T);
printf("\n");
deepth=TreeDeep(T);
printf("树的深度为:%d",deepth);
printf("\n");
Leafcount(T,num);
printf("树的叶子结点个数为:%d",num);
printf("\n");
return 0;
}
可以的话麻烦给出错误截图,另外你的Leafcount(T,num);操作,应该是num = Leafcount(T,num);
不然的话,运行函数结束的值可不会自己长脚跑到num里把自己保存下来