二叉树层序遍历出错
typedef char ElementType;
typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{
ElementType Data;
BinTree Left;
BinTree Right;
};
void LevelorderTraversal( BinTree BT )
{
if(!BT)return;
BinTree q[1000];
int front=0,rear=-1;
q[++rear]=BT;
while(front<=rear)
{
BinTree t=q[front++];
printf(" %c",t->Data);
if(t->Left) q[++rear]=t->Left;
if(t->Right)q[++rear]=t->Right;
}
}
麻烦描述得更详细些,比如具体的报错信息。
逻辑上没看出啥问题,可能是队列q溢出(树的大小超过1000),也可能是输出格式不符合要求(第一个元素输出前的空格)。
https://pintia.cn/problem-sets/15/problems/732
主要是这道题自定义测试部分不太完善,只能通过提交答案验证
提交答案显示前三个测试点答案错误,后两个测试点答案正确
完整作答代码如下:
void InorderTraversal( BinTree BT )
{
if(!BT)return;
InorderTraversal(BT->Left);
printf(" %c",BT->Data);
InorderTraversal(BT->Right);
}
void PreorderTraversal( BinTree BT )
{
if(!BT)return;
printf(" %c",BT->Data);
InorderTraversal(BT->Left);
InorderTraversal(BT->Right);
}
void PostorderTraversal( BinTree BT )
{
if(!BT)return;
InorderTraversal(BT->Left);
InorderTraversal(BT->Right);
printf(" %c",BT->Data);
}
void LevelorderTraversal( BinTree BT )
{
BinTree q[1000];
if(!BT)return;
int front=0,rear=-1;
q[++rear]=BT;
while(front<=rear)
{
BinTree t=q[front++];
printf(" %c",t->Data);
if(t->Left) q[++rear]=t->Left;
if(t->Right)q[++rear]=t->Right;
}
}