#include<stdio.h>
#include<stdlib.h>
typedef struct btnode{
char data;
struct btnodeLlink;
struct btnodeRlink;
}btnode,btree;
//创建
void CreateTree(btreeroot){
char ch;
ch=getchar();
if(ch=='.')*root=NULL;
else
{
*root=(btree)malloc(sizeof(btnode));
(*root)->data=ch;
CreateTree(&((*root)->Llink));
CreateTree(&((*root)->Rlink));
}
}
//输出
void PrintTree(btree root,int nLayer){
if(root==NULL) return;
PrintTree(root->Llink,nLayer+1);
PrintTree(root->Rlink,nLayer+1);
for(int i=0;i<nLayer;i++)
printf(" ");
printf("a\n");
}
//先序遍历二叉树
void PreOrder(btree root)
{
if(root!=NULL){
printf("%c",root->data);
PreOrder(root->Llink);
PreOrder(root->Rlink);
}
}
//中序遍历二叉树
void InOrder(btree root){
if(root!=NULL){
InOrder(root->Llink);
printf("%c",root->data);
InOrder(root->Rlink);
}
}
//后序遍历二叉树
void PostOrder(btree root){
if(root!=NULL){
PostOrder(root->Llink);
PostOrder(root->Rlink);
printf("%c",root->data);
}
}
//显示叶子节点个数
int leaf(btree root){
int LeafCount;
if(root==NULL)
LeafCount=0;
else if((root->Llink==NULL)&&(root->Rlink==NULL))
LeafCount=1;
else LeafCount=leaf(root->Llink)+leaf(root->Rlink);
return LeafCount;
}
void Menu(){
printf("");
printf("\n(1)创建二叉树。" );
printf("\n(2) 二叉树图形。");
printf("\n(3) 先序遍历显示树。");
printf("\n(4) 中序遍历显示树。");
printf("\n(5) 后序遍历显示树。");
printf("\n(6) 统计该树叶子节点个数。");
printf("\n(0) 退出。");
printf("");
}
void ActionMenu(btree*lroot){
int n=1;
btree flag=NULL,root=*lroot;
int depth=0,h=1,cflag=0;
while(n)
{
printf("\n\n请选择一个操作:");
scanf("%d",&n);
switch(n)
{
case 1:
printf("请输入二叉树");
getchar();
CreateTree(&root);
break;
case 2:
printf("该二叉树图形为:");
PrintTree(root,1);
break;
case 3:
printf("先序遍历显示为:");
PreOrder(root);
printf("\n");
break;
case 4:
printf("中序遍历显示为:");
InOrder(root);
printf("\n");
break;
case 5:
printf("后序遍历显示为:");
PostOrder(root);
printf("\n");
break;
case 6:
printf("该树叶子节点数目为:%d\n",leaf(root));
break;
case 0:break;
default:printf("请输入正确的数字!\n");
}
}
}
int main(){
btree rootx=NULL;
Menu();
ActionMenu(&rootx);
}
代码没有问题,你输入时:12@@3@@ , 以 ‘@’符作为空结点标志,而创建二叉树代码里:if(ch=='.')*root=NULL; 是以 ‘.' 圆点作为标志的,输入二叉树时应为:12..3.. ,才可以。 或是将if(ch=='.')*root=NULL; 修改为:if(ch=='@')*root=NULL; 。