为了账号安全,请及时绑定邮箱和手机立即绑定

为什么子函数以先序次序生成二叉树,但运行时并没有将生成的二叉树T传递呢?

为什么子函数以先序次序生成二叉树,但运行时并没有将生成的二叉树T传递呢?

C++ C
开满天机 2022-01-19 19:15:49
函数代码如下:#include<stdio.h>#include<stdlib.h>#define OK 1#define ERROR 0#define OVERFLOW -1typedef int Status;typedef char ElemType;typedef struct BitNode{ElemType data;struct BitNode *LChild,*RChild;}BitNode,*BitTree;//生成一个空的二叉树Status InitBitTree(BitTree T){T = NULL;return OK;}//先序构造二叉树Status CreateBitTree ( BitTree T ) {ElemType ch; scanf("%c",&ch);if(ch == ' '){T = NULL;}else{T = (BitNode *)malloc(sizeof(BitNode)); if(!T){printf("分配内存空间失败!");exit(OVERFLOW); }T->data = ch;CreateBitTree(T->LChild );CreateBitTree(T->RChild ); }return OK;}//先序遍历二叉树int PreVisit(BitTree T,int (*VisitTree)(ElemType elem)){if(T){if(VisitTree(T->data))if(PreVisit(T->LChild,VisitTree))if(PreVisit(T->RChild,VisitTree))return OK;return ERROR;}elsereturn OK;}//打印输出二叉树中的数据int VisitTree(ElemType elem){printf("%3c",elem); return OK;}//主函数int main(){BitTree T;InitBitTree(T);printf("请输入字符,创建树:\n");CreateBitTree(T );printf("先序遍历结果为:\n");PreVisit(T,VisitTree);printf("\n"); return 0;}先序遍历函数PreVisit() 绝对没错,我已反复调试过很多遍,现在把耳朵都调耳鸣了,悲剧啊。。。财富值的话仅剩2点了,望大家不吝赐教!
查看完整描述

2 回答

?
30秒到达战场

TA贡献1828条经验 获得超6个赞

//先序构造二叉树
BitTree CreateBitTree(BitTree &T)
{
ElemType ch;
scanf("%c",&ch);
if(ch == ' ')
{
T = NULL;
}
else
{
T = (BitNode *)malloc(sizeof(BitNode));
if(!T)
{
printf("分配内存空间失败!");
exit(OVERFLOW);
}
T->data = ch;
CreateBitTree(T->LChild );
CreateBitTree(T->RChild );
}
return T;
}



查看完整回答
反对 回复 2022-01-23
?
四季花海

TA贡献1811条经验 获得超5个赞

本身具备遍历功能,例如:Disp_xian直接调用就行
要想使用PreOrderTraverse函数,必须增加打印输出函数才能满足第二个参数是函数指针类型
#includestdio.h

查看完整回答
反对 回复 2022-01-23
  • 2 回答
  • 0 关注
  • 170 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信