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

函数代码如下:
#include<stdio.h>
#include<stdlib.h>

#define OK 1
#define ERROR 0
#define OVERFLOW -1

typedef 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;
}else
return 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点了,望大家不吝赐教!

开满天机
浏览 207回答 2
2回答

30秒到达战场

//先序构造二叉树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;}

四季花海

本身具备遍历功能,例如:Disp_xian直接调用就行要想使用PreOrderTraverse函数,必须增加打印输出函数才能满足第二个参数是函数指针类型#includestdio.h
打开App,查看更多内容
随时随地看视频慕课网APP