数据结构实验之二叉树五:层序遍历
Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description
已知一个按先序输入的字符序列,如abd,,eg,,,cf,,,(其中,表示空结点)。请建立二叉树并求二叉树的层次遍历序列。
Input
输入数据有多行,第一行是一个整数t (t<1000),代表有t行测试数据。每行是一个长度小于50个字符的字符串。
Output
输出二叉树的层次遍历序列。
Sample Input
2
abd,,eg,,,cf,,,
xnl,,i,,u,,
Sample Output
abcdefg
xnuli
Hint
Source
xam
#include <stdio.h> #include <stdlib.h> #include <string.h> char a[101]; int l; struct node//二叉树的定义 { char data; struct node *lc; struct node *rc; }; struct node *creat() { struct node *root; char c; c = a[l++]; if(c == ',') { return NULL; } else { root = (struct node *)malloc(sizeof(struct node)); root->data = c; root->lc = creat(); root->rc = creat(); } return root; } void cengci(struct node *root) { int out = 0, in = 0; struct node *q[100]; q[in++] = root; while(in > out) { if(q[out] != 0) { printf("%c", q[out]->data); q[in++] = q[out]->lc; q[in++] = q[out]->rc; } out++; } } int main() { int t, i; struct node *root; while(scanf("%d", &t) != EOF) { for(i = 1; i <= t; i++) { scanf("%s", a); l = 0; root = (struct node *)malloc(sizeof(struct node)); root = creat(); cengci(root); printf("\n"); } } return 0; }