Description
已知一个按先序输入的字符序列,如abd,eg,cf,(其中,表示空结点)。请建立二叉树并求二叉树的层次遍历序列。
Input
输入数据有多行,第一行是一个整数t (t<1000),代表有t行测试数据。每行是一个长度小于50个字符的字符串。
Output
输出二叉树的层次遍历序列。
Sample Input
2
abd,eg,cf,
xnl,i,u,
Sample Output
abcdefg
xnuli
参考程序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ROOM sizeof(struct TreeNode)
#define LEN 50
struct TreeNode
{
char data;
struct TreeNode *LeftChild;
struct TreeNode *RightChild;
};
char a[LEN+5];
struct TreeNode* b[LEN+5];
int i,j;
struct TreeNode* CreateTree(char x)
{
struct TreeNode *p;
p=(struct TreeNode*)malloc(ROOM);
if(x!=','&&i<=strlen(a))
{
p->data=x;
p->LeftChild=CreateTree(a[++i]);
p->RightChild=CreateTree(a[++i]);
}
else
{
p=NULL;
}
return p;
}
void LevelVisit(struct TreeNode *root)
{
if(!root)return;//此步必不可少,一定要先判断是否为空树
b[j]=root;
int t=1;
while(1)
{
if(b[j]->LeftChild)
{
b[t++]=b[j]->LeftChild;
}
if(b[j]->RightChild)
{
b[t++]=b[j]->RightChild;
}
++j;
if(j==t)
{
break;
}
}
}
int main()
{
int t,k;
struct TreeNode *Tree;
scanf("%d",&t);
getchar();
while(t--)
{
gets(a);
i=0,j=0;
Tree=CreateTree(a[0]);
LevelVisit(Tree);
for(k=0;k<j;k++)
{
printf("%c",b[k]->data);
}
printf("\n");
}
return 0;
}
注意,上面代码中,在进行层次遍历时,如果不事先判断空树的情况,Online Judge中在提交时,会出现“RTE”的提示,即“Runtime Error”。出现此提示通常的解决办法是,重点检查数组下标越界的问题 。
版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: