有大佬可以帮忙调试一下吗?😭😭已经可以运行了,但是它遍历的结果是死循环,可以看看是什么原因吗?孩子已经调改半天时间了,感觉应该没有问题了的,但是但是😭😭😭😭求求各位了
#include <Stdio.h>
#include <stdlib.h>
#include<iostream>
using namespace std;
#define MAX_TREE_SIZE 50
#define OK 1
#define false 0
typedef int ElemType;
typedef int Status;
//树的定义
typedef struct BiTNode
{
ElemType data;
struct BiTNode *lchild,*rchild;//左右孩子指针
}BiTNode,*BiTree;
//队列的定义
typedef struct
{
BiTree data[MAX_TREE_SIZE];//0号单元存储根结点
int front,rear;//分别指向左右孩子
}SqQueue;
void InitQueue(SqQueue &s);//初始化
bool QueueEmpty(SqQueue &s);//判断队列空
bool Treeenter(SqQueue &s,BiTree T);//进队列
bool Treeout(SqQueue &s,BiTree T);//出队列
bool GetTop(SqQueue &s);//读取队列顶元素
Status CreateBiTree(BiTree &T);//创建二叉树,递归创建,默认先序输入
Status LevelOrderTraverse(BiTree T);//层次遍历
//#include"层次遍历.h"
//初始化
void InitQueue(SqQueue &s)
{
s.front=s.rear=-1;
}
//判断队列空
bool QueueEmpty(SqQueue &s){
if(s.front==s.rear)
return true;
else
return false;
}
//进队列
bool Treeenter(SqQueue &s,BiTree T)
{
if(s.front==MAX_TREE_SIZE-1)
{
return false;
}
s.front++;
s.data[++s.front]=T;
return true;
}
//出队列
bool Treeout(SqQueue &s,BiTree T)
{
if(s.front==s.rear)
{
return false;
}
s.front++;
T=s.data[s.front--];
return true;
}
//创建二叉树,递归创建,默认先序输入
Status CreateBiTree(BiTree &T)
{
//按先序次序输入二叉树中结点的值(一个字符),空格字符表示空树
//构造二叉树表示的二叉树T
char ch;
ch=getchar();
if(ch==' ')
{
T=NULL;
}
else
{
T=(BiTree)malloc(sizeof(BiTNode));
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return OK;
}
//中序遍历--非递归
Status LevelOrderTraverse(BiTree T)
{//采用二叉链表存储结构
//层次遍历二叉树算法
SqQueue s;
InitQueue(s); //初始化队列
if(T!=NULL)
{
Treeenter(s,T);
}
while(!QueueEmpty(s))
{
Treeout(s,T);
printf("%c",T->data);
if(T->lchild!=NULL)
{
Treeenter(s,T->lchild);
}
if(T->rchild!=NULL)
{
Treeenter(s,T->rchild);
}
}
return OK;
}
//#include"层次遍历.h"
int main()
{
BiTree tree;
cout<<"请输入字符串:"<<endl;
CreateBiTree(tree);
printf("层次遍历:");
LevelOrderTraverse(tree);
return 0;
}