最佳答案
1、声明类型错误2、本身具备遍历功能,例如:Disp_xian直接调用就行3、要想使用PreOrderTraverse函数,必须增加打印输出函数才能满足第二个参数是函数指针类型#include#include#define OK 1#define ERROR 0#define OVERFLOW -2typedef char TElemType;//字符录入typedef int Status;typedef struct BiTNode//注意采用的是二叉链表作为二叉树的存储结构{ TElemType data; struct BiTNode *lchild,*rchild;}BiTNode, *BiTree;Status CreateBiTree_PreOrder(BiTree &T) //先序次序构造二叉树{ TElemType ch; scanf("%c",&ch); if(ch==' ') T=NULL; else { if(!(T=(BiTNode *)malloc(sizeof(BiTNode)))) exit(OVERFLOW); T->data=ch; CreateBiTree_PreOrder(T->lchild); CreateBiTree_PreOrder(T->rchild); } return OK;}Status PreOrderTraverse(BiTree T, Status(*Visit)(TElemType e))//先序遍历{ if(T) { if((*Visit)(T->data)) if(PreOrderTraverse(T->lchild,Visit)) if(PreOrderTraverse(T->rchild,Visit)) return OK; return ERROR; } return OK;}Status InOrderTraverse(BiTree T, Status (*Visit)(TElemType e)){ //中序遍历 if(T!=NULL){ if(InOrderTraverse(T->lchild,Visit)) if((*Visit)(T->data)) if(InOrderTraverse(T->rchild,Visit)) return OK; return ERROR; } else return OK;}Status PostOrderTraverse(BiTree T, Status(*Visit)(TElemType e)){ //后序遍历 if(T!=NULL){ if(PostOrderTraverse(T->lchild,Visit)) if(PostOrderTraverse(T->rchild,Visit)) if((*Visit)(T->data)) return OK; return ERROR; } else return OK;}void Disp_zhong(BiTree root)//中序输出{ if(root!=NULL) { Disp_zhong(root->lchild); printf("%c->",root->data);//是data,不是date Disp_zhong(root->rchild); }}void Disp_hou(BiTree root)//后序输出{ if(root!=NULL) { Disp_hou(root->lchild); Disp_hou(root->rchild); printf("%c->",root->data); }}void Disp_xian(BiTree root)//先序输出{ if(root!=NULL) { printf("%c->",root->data); Disp_xian(root->lchild); Disp_xian(root->rchild); }}//输出序列Status PrintTree(TElemType e){ if(e!=' ') { printf("%c ",e); return OK; } else return ERROR;}void main()//主函数{ BiTree T; printf("以先序次序创建二叉树:\n"); CreateBiTree_PreOrder(T); printf("先序遍历序列为:\n"); PreOrderTraverse(T,PrintTree); printf("\n"); printf("中序遍历序列为:\n"); InOrderTraverse(T,PrintTree); printf("\n"); printf("后序遍历序列为:\n"); PostOrderTraverse(T,PrintTree); printf("\n"); }追问void Disp_zhong(BiTree root)//中序输出void Disp_hou(BiTree root)//后序输出void Disp_xian(BiTree root)//先序输出这3个函数在主函数不是没用到吗?
最佳答案由网友 朱小亲 提供