#include<stdlib.h>
#include<stdio.h>
typedef struct bitnode{
int date;
struct bitnode * lchild, *rchild;
}bitnode,*bitree;
int j=0;
// 函数说明
bitree *createbitree(bitree *T);
int Qtraversebitree(bitree T);
int Ztraversebitree(bitree T);
int Htraversebitree(bitree T);
int Ftraversebitree(bitree T);
/*******************主函数****************************/
main()
{
bitree Tree,*T ; int k;
do
{
printf("\n ╔-----------------------------------------------╗"); //显示一个简易菜单
printf("\n ┆ 先序创建----1 先序遍历------2 ┆");
printf("\n ┆ 中序遍历----3 后序遍历------4 ┆");
printf("\n ┆ 叶子个数--- 5 退出程序------6 ┆");
printf("\n ╚-----------------------------------------------╝\n");
printf("请输入所要进行的操作序号: ");
scanf("%d",&k); //接受用户的选择
switch(k) //接受用户的函数
{case 1: printf("左右子树为空时用0代替,用间隔符隔开:\n");
T=createbitree(&Tree);
break;
case 2:Qtraversebitree(*T );
break;
case 3:Ztraversebitree(*T );
break;
case 4:Htraversebitree(*T );
break;
case 5:printf("\n叶子个数为: %d\n",Ftraversebitree(*T ));
break;
case 6:break;
default:printf("错误选择!请重选\n");break;
}
}while(k!=6); //直到i被赋值为6
return 0;
}
/*******************创建二叉树函数****************************/
bitree *createbitree(bitree *T)
{
char ch;
scanf("%d",&ch);
if(ch==0)
(*T)=NULL;
else{
if(!((*T) =(bitnode *)malloc(sizeof(bitnode))))
exit(0);
(*T)->date = ch; //生成根节点
createbitree(&(*T)->lchild);
createbitree(&(*T)->rchild);
}
return T;
}
/*******************先序遍历函数****************************/
Qtraversebitree(bitree T)
{
if(T){printf("%d ",T->date);
if(Qtraversebitree(T->lchild))
if(Qtraversebitree(T->rchild)) return 1;
return 0;
}
else return 1;
}
/*******************中序遍历函数****************************/
Ztraversebitree(bitree T)
{
if(T){if(Ztraversebitree(T->lchild))
printf("%d ",T->date);
if(Ztraversebitree(T->rchild)) return 1;
return 0;
}
else return 1;
}
/*******************后序遍历函数****************************/
Htraversebitree(bitree T)
{
if(T){if(Htraversebitree(T->lchild))
if(Htraversebitree(T->rchild))
printf("%d ",T->date); return 1;
return 0;
}
else return 1;
}
/******************返回叶子节点个数函数*************/
Ftraversebitree(bitree T)
{
if(T){if(!((T->lchild)||(T->rchild))) j++;
if(Ftraversebitree(T->lchild))
if(Ftraversebitree(T->rchild)) return j;
return j;
}
else return j;
}