树的遍历问题?
应该是建好树后指针有问题但是找不出来,哪位给看看
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
typedef struct bitnode
{
char data;
struct bitnode *lchild, *rchild;
}bitnode,*bitree;
//构建二叉树
void jianshu(bitree T)
{
printf("请输入该节点数据:");
scanf("%c",&T->data);
getchar();
if(T->data!='#')
{
T->lchild=(bitree)malloc(sizeof(bitnode));
jianshu(T->lchild);
T->rchild=(bitree)malloc(sizeof(bitnode));
jianshu(T->rchild);
}
return;
}
//节点数据输出
int visit(bitree a)
{
if(a->data!='#')
{
printf("该节点数据为%c",a->data);
return 1 ;
}
else
{
//a->data=NULL;
//printf("该节点数据为空!");
return 0;
}
}
//先序遍历
int xianxu(bitree T)
{
if(T)
{
if(visit(T))
if(xianxu(T->lchild))
if(xianxu(T->rchild))
return 1;
}
else
return 0;
}
//中序遍历
int zhongxu(bitree T)
{
if(T)
{
if(zhongxu(T->lchild))
if(visit(T))
if(zhongxu(T->rchild))
return 1;
}
else
return 0;
}
//后序遍历
int houxu(bitree T)
{
if(T)
{
if(houxu(T->lchild))
if(houxu(T->rchild))
if(visit(T))
return 1;
}
else
return 0;
}
//统计叶子节点数
void yezi(bitree T,int *k)
{
if(T)
{
if(T->data=='#')
*k++;
else
{
yezi(T->lchild,k);
yezi(T->rchild,k);
}
return;
}
else
{
printf("该树还没有建立!");
return;
}
}
int main(void)
{
int i,j=1,k=0;
bitnode T;
while(j)
{
printf("\t********功能表**********************\n");
printf("\t********0、建立树*******************\n");
printf("\t********1、先序遍历*****************\n");
printf("\t********2、中序遍历*****************\n");
printf("\t********3、后序遍历*****************\n");
printf("\t********4、统计叶子节点数***********\n");
printf("\t********5、退出*********************\n");
scanf("%d",&i);
getchar();
switch(i)
{
case 0:jianshu(&T);break;
case 1:i=xianxu(&T);break;
case 2:i=zhongxu(&T);break;
case 3:i=houxu(&T);break;
case 4:yezi(&T,&k);printf("该树中有%d个叶子节点\n",k);break;
case 5:j--;break;
default:printf("输入有错!");break;
}
/*
if(i)
printf("遍历成功!");
else
printf("二叉树不存在,遍历失败");
*/
}
return 0;
}
遍历 C printf
[解决办法]
我正好遇到过这个问题,建树那有错误,改用二级指针带回:
void Create_Tree(BTree *T)
{
char ch;
ch=getchar();
if(ch=='#')*T=NULL;
else
{
*T=(BTree)malloc(sizeof(Bnode));
(*T)->data=ch;
Create_Tree(&(*T)->lchild);
Create_Tree(&(*T)->rchild);
}
}
...
main(){
Btree T;
Create_Tree(&T);
}