幸会 2022-12-15 00:37 采纳率: 100%
浏览 28
已结题

关于#二叉树图遍历#的问题,如何解决?

题目:建立一个二叉树,按层遍历二叉树。真心请教各位下面原码中BiTNode *qu[Maxsize]处报错,该如何修改?

# include <stdio.h>
# include <stdlib.h> 
  typedef int Etype;
  typedef struct BiTNode  /* 树结点结构 */
      {  Etype data;
         struct BiTNode *lch,*rch;
      }BiTNode;
 
/* 函数原形声明 */
BiTNode *creat_bt1();
BiTNode *creat_bt2();
void LevelOrder(BiTNode *bt);
BiTNode *t; int n,n0,n1,n2;
/*  主函数 */
void main()
 { char ch; int k;
  do { printf("\n\n\n");
       printf("\n\n     1. 建立二叉树方法1 ");
       printf("\n\n     2. 建立二叉树方法2");
       printf("\n\n     3. 层次遍历二叉树");
       printf("\n\n     4. 结束程序运行");
       printf("\n======================================");
       printf("\n     请输入您的选择 (1,2,3,4,5)");  scanf("%d",&k);
       switch(k)
     { case 1:t=creat_bt1( );break; /*  调用性质5建立二叉树算法 */
       case 2:t=creat_bt2( );break; /*  调用递归建立二叉树算法   */
       case 3: { LevelOrder(t);                /*  调用层次遍历     */
                 printf("\n\n    打回车键,继续。"); ch=getchar();
               } break;
       case 4: exit(0);
      } /*  switch  */
      printf("\n ----------------");
   }while(k>=1 && k<5);
     printf("\n               再见!"); 
     printf("\n      打回车键,返回。"); 
     ch=getchar();
} /* main */  
/* 利用二叉树性质5 ,借助一维数组V 建立二叉树 */
BiTNode *creat_bt1()
 { BiTNode *t,*p,*v[20]; int i,j; Etype e; 
    /* 输入结点的序号i 、结点的数据e  */
    printf("\n i,data=?"); scanf("%d,%d",&i,&e);
    while(i!=0 && e!=0)              /* 当 i ,e都为0时,结束循环  */
       { p=(BiTNode *)malloc(sizeof(BiTNode));
         p->data=e; p->lch=NULL; p->rch=NULL;
         v[i]=p;
         if (i==1) t=p;                      /* 序号为1的结点是根 */
          else{ j=i/2;
                if(i%2==0) v[j]->lch=p; /* 序号为偶数,做左孩子*/
                   else   v[j]->rch=p;  /* 序号为奇数,做右孩子*/
              }
         printf("\n i,data=?"); scanf("%d,%d",&i,&e);
       }
      return(t);
 } /* creat_bt1 */
 /* 模仿先序递归遍历方法,建立二叉树 */
 BiTNode *creat_bt2()
  { BiTNode *t;
    Etype e;
     printf("\n data="); scanf("%d",&e);
     if(e==0) t=NULL;                  /* 对于0值,不分配新结点 */
       else { t=(BiTNode *)malloc(sizeof(BiTNode));
              t->data=e;
              t->lch=creat_bt2();  /* 左孩子获得新指针值  */
              t->rch=creat_bt2();  /* 右孩子获得新指针值  */
             }
     return(t);
  } /* creat_bt2 */

void LevelOrder(BiTNode *bt)
{   BiTNode *p;
    BiTNode *qu[Maxsize];
    int front,rear;
    front=rear=0;
    rear++;qu[rear]=bt;
    while (front!=rear)
    {    front=(front+1)%Maxsize;
        p=qu[front];
        printf("%c",p->data);
        if(p->lch!=NULL)
        {    rear=(rear+1)%Maxsize;
        qu[rear]=p->lch;
        }
        if(p->rch!=NULL)
        {    rear=(rear+1)%Maxsize;
            qu[rear]=p->rch;
        }
    }
 } 

下面是报错的内容
error C2065: 'Maxsize' : undeclared identifier
error C2057: expected constant expression
error C2466: cannot allocate an array of constant size 0
error C2133: 'qu' : unknown size
第一次提问,若有描述不清楚请多多包涵,谢谢各位!

  • 写回答

1条回答 默认 最新

  • 清风_流 2022-12-15 12:50
    关注

    Maxsize变量没定义,变量需要声明再使用,如果在其他文件中地方声明成全局变量;或者宏,在该文件中需要引用;
    全局变量用extern,宏用include 包含头文件

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月26日
  • 已采纳回答 12月18日
  • 创建了问题 12月15日

悬赏问题

  • ¥40 求一款能支持ios15以上的屏蔽越狱插件。比较好用的
  • ¥15 C++ QT对比内存字符(形式不定)
  • ¥30 C++第三方库libiconv 远程安装协助
  • ¥15 https://github.com/youlaitech/vue3-element-admin/blob/master/src/store/modules/user.ts 这2句代码如何理解
  • ¥15 duilib开发文本字串超过长度显示
  • ¥20 mysql的.ibd文件为啥那么多
  • ¥15 C++中采用栈和BFS算法求解迷宫问题
  • ¥15 关于#java#的问题:这是跳转失败出现的界面这是哪个出现问题的servlet(开发工具-ide)
  • ¥15 EBS R12费用采购跨月冲销
  • ¥15 python中用mplfinance如何做到多股同列?