IrAts 发表于 2018-11-6 21:04:42

关于二叉树的层次遍历

为什么这个代码输出的数据是乱码,是哪里错了?
#include "stdio.h"
#include "stdlib.h"
#define MAXSIZE 100
typedef char ElemType;
typedef struct BTNode
{
    ElemType data;
    struct BTNode *lchild,*rchild;
}BTNode,*BiTree;
typedef struct
{
    BiTree *base;
    int front;
    int rear;
}SqQueue;
void CreatBiTree(BiTree &t)
{
    char c;
    scanf("%c",&c);
    if(c=='#')
    {
      t=NULL;
    }
    else
    {
      t=new BTNode;
      t->data=c;
      CreatBiTree(t->lchild);
      CreatBiTree(t->rchild);
    }

}
void InitSqQueue(SqQueue &q)
{
    q.base=new BiTree;
    q.front=q.rear=0;
}
int Push(SqQueue &q,BiTree t)
{
    if((q.rear+1)%MAXSIZE==q.front)
    return 0;
    q.base=t;
    q.rear=(q.rear+1)%MAXSIZE;
    return 1;
}
int Pop(SqQueue &q)
{
    if(q.rear==q.front)
      return 0;
    q.front=(q.front+1)%MAXSIZE;
    return 1;
}
int QueueEmpty(SqQueue q)
{
    return (q.front==q.rear);
}
BiTree Gethead(SqQueue q)
{
    if(QueueEmpty(q))
    {
      return NULL;
    }
    else return (q.base[(q.front+1)%MAXSIZE]);
}
void Cengci(BiTree t)
{
    SqQueue q;
    BTNode *p;
    InitSqQueue(q);
    Push(q,t);
    while(!QueueEmpty(q))
    {
      p=Gethead(q);
      Pop(q);
      printf("%c ",p->data);
      if(p->lchild!=NULL)
      {
            Push(q,p->lchild);
      }
      if(p->rchild!=NULL)
      {
            Push(q,p->rchild);
      }
    }
}
int main()
{
    BiTree T=NULL;
    printf("请输入二叉树的内容\n");
    CreatBiTree(T);
    printf("\n");
    printf("二叉树的先序输出是:\n");
    Cengci(T);
    return 1;
}

西瓜小刚 发表于 2018-11-13 10:38:21

你是 怎么键入的能否 发上来 看看
页: [1]
查看完整版本: 关于二叉树的层次遍历