函数代码如下:
#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点了,望大家不吝赐教!
30秒到达战场
四季花海