| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 2349 人关注过本帖
标题:急!!!二叉树的创建与遍历,显示有三个错误,因为不熟练,所以求大神解答 ...
只看楼主 加入收藏
邓娟
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-4-17
结帖率:100%
  已结贴   问题点数:20  回复次数:3   
急!!!二叉树的创建与遍历,显示有三个错误,因为不熟练,所以求大神解答问题在哪儿!!
#include   
#include
#include  
typedef int Status;  
typedef char TElemType;
 
typedef struct  BiTNode
{      
    TElemType    data;     
    struct  BiTNode  *lchild,  *rchild;
}BiTNode,*BiTree;

//建立二叉链表   
Status CreateBiTree(BiTree &T)  
{   
    TElemType ch;     
    scanf("%c",&ch);     
    if (ch=='  ')      
        T= NULL;     
    else   
    {           
        if (!(T = (BiTNode *)malloc(sizeof(BiTNode))))               
            return OVERFLOW;           
        T->data = ch;                        
        CreateBiTree(T->lchild);            
        CreateBiTree(T->rchild);         
}
    return OK;  } // CreateBiTree

//先序递归遍历  
void PreOrder(BiTree T)
{   
    if(T)   
    {  
        printf("%c",T->data);
        PreOrder(T->lchild);
        PreOrder(T->rchild);     
    }
}

//中序递归遍历  
void InOrder(BiTree T)
{  
    if(T)   
    {  
        InOrder(T->lchild);
        printf("%c",T->data);
        InOrder(T->rchild);
    }
}

//后序递归遍历  
void PostOrder(BiTree T)
{
    if(T)   
    {   
        PostOrder(T->lchild);
        PostOrder(T->rchild);
        printf("%c",T->data);        
    }
}

//先序非递归遍历
status PreIOT(BiTree T,status (*visit)(ElemType e)){
InitStack(S);
 p=T;
while (p||!StackEmpty(S)){
    Pop(S,p);//访问根节点
    if (!visit(p->data)) return ERROR;
        else
        {
                Push(S,p);
                p=p->lchild;
        }
    }
    else{
        Pop(S,p);
        p=p->rchild;
    }
}
return OK;
}//IOT

//中序非递归遍历
status InIOT(BiTree T,status (*visit)(ElemType e)){
InitStack(S);
 p=T;
while (p||!StackEmpty(S)){
    if (p)
    {
        Push(S,p);
                p=p->lchild;
        }
    }
    else{
        Pop(S,p);
        if (!visit(p->data)) return ERROR;
        p=p->rchild;
    }
}
return OK;
}//IOT

//后序非递归遍历
status PostIOT(BiTree T,status (*visit)(ElemType e)){
InitStack(S);
 p=T;
while (p||!StackEmpty(S)){
    if (p)
    {
        Push(S,p);
                p=p->lchild;
        }
    }
    else{
        Pop(S,p);
        p=p->rchild;
        if (!visit(p->data)) return ERROR;
    }
}
return OK;
}//IOT

//层序遍历
status LOT(BiTree T,status (*visit)(ElemType e)){
  if (!T) return OK;
  InitQueue(Q);
  EnQueue(Q,T);//若二叉树非空,则根入队
  
  while (!QueueEmpty(Q)){//循环结束条件是队列为空
      DeQueue(Q,p);//队头出队,并访问
      if (!visit(p->data)) return ERROR;
      if (p->lchild) EnQueue(Q,p->lchild);//若当前结点有左子树,则其左子树的根入队
      if (p->rchild) EnQueue(Q,p->rchild);//若当前结点有右子树,则其右子树的根入队
  }
  return OK;
}


void main()
{   
    BiTree T;
    printf("\n 1.先序建立二叉链表:");
    printf("\n 2.先序遍历二叉树:");  
    printf("\n 3.中序遍历二叉树:");  
    printf("\n 4.后序遍历二叉树:");
    printf("\n 5.层序遍历二叉树:");
    printf("\n 6.退出");
    printf("请选择操作项目:");
    scanf("%d",&k);
    system("cls");
    switch(k)
    {
    case 1:
           printf("请输入要建立的信息(两个空格代表结点为空):\n");
           CreateBiTree(T);
           system("pause");
           break;
    case 2:
           printf("请输入遍历方式(0代表递归遍历,1代表非递归遍历):");
           scanf("%d",&flag);
           switch(flag)
           {
           case 0:
               printf("先序递归遍历结果为:\n");
               PreOrder(T);
               printf("\n");
               system("pause");
               break;
           case 1:
               printf("先序非递归遍历结果为:\n");
               PreIOT(T,e);
               printf("\n");
               system("pause");
           }
               break;
    case 3:
           printf("请输入遍历方式(0代表递归遍历,1代表非递归遍历):");
           scanf("%d",&flag);
           switch(flag)
           {
           case 0:
               printf("中序递归遍历结果为:\n");
               InOrder(T);
               printf("\n");
               system("pause");
               break;
           case 1:
               printf("中序非递归遍历结果为:\n");
               InIOT(T,e);
               printf("\n");
               system("pause");
           }
               break;
    case 4:
           printf("请输入遍历方式(0代表递归遍历,1代表非递归遍历):");
           scanf("%d",&flag);
           switch(flag)
           {
           case 0:
               printf("后序递归遍历结果为:\n");
               PostOrder(T);
               printf("\n");
               system("pause");
               break;
           case 1:
               printf("后序非递归遍历结果为:\n");
               PostIOT(T,e);
               printf("\n");
               system("pause");
           }
               break;
    case 5:
        printf("层序遍历结果为:\n");
        LOT(T,e);
        printf("\n");
        system("pause");
        break;
    case 6:break;
     default:
         printf("选择出错,请重新选择!\n");
         system("pause");
    }
    system("cls");
}


错误:
error C2065: 'OVERFLOW' : undeclared identifier
error C2065: 'OK' : undeclared identifier
error C2146: syntax error : missing ';' before identifier 'PreIOT'
error C2501: 'status' : missing storage-class or type specifiers
fatal error C1004: unexpected end of file found
搜索更多相关主题的帖子: include  return  二叉树  
2015-04-17 10:46
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:175
帖 子:1784
专家分:10000
注 册:2014-12-6
  得分:20 
未声明、语法错误等,如果不是代码粘贴的话很容易解决的。

能编个毛线衣吗?
2015-04-17 11:00
邓娟
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-4-17
  得分:0 
回复 2楼 wmf2014
可以教一下怎么写不,不会啊,确实有些是粘贴的
2015-04-17 11:19
传哥
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2015-5-10
  得分:0 
回复 3楼 邓娟
你这是复制粘贴的,有一些细节你都不知道
2015-05-10 22:53







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030407 second(s), 7 queries.
Copyright©2004-2019, BCCN.NET, All Rights Reserved