c语言顺序链表的建立二叉树,我用C语言先序次序创建二叉树,然后分别用三种方法遍历此二叉树,不? 爱问知识人...

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("以先序次序创建二叉树:

"); CreateBiTree_PreOrder(T); printf("先序遍历序列为:

"); PreOrderTraverse(T,PrintTree); printf("

");  printf("中序遍历序列为:

"); InOrderTraverse(T,PrintTree); printf("

");  printf("后序遍历序列为:

"); PostOrderTraverse(T,PrintTree); printf("

"); }

追问void Disp_zhong(BiTree root)//中序输出void Disp_hou(BiTree root)//后序输出void Disp_xian(BiTree root)//先序输出这3个函数在主函数不是没用到吗?。

全部

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值