求二叉树的层次遍历 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic PRoblem Description
已知一颗二叉树的前序遍历和中序遍历,求二叉树的层次遍历。 Input
输入数据有多组,输入T,代表有T组测试数据。每组数据有两个长度小于50的字符串,第一个字符串为前序遍历,第二个为中序遍历。 Output
每组输出这颗二叉树的层次遍历。 Example Input
2 abc bac abdec dbeac Example Output
abc abcde Hint
Author
fmh
这个题是根据前序和中序重建二叉树,然后在求层序遍历。
#include<stdio.h>#include<stdlib.h>#include<string.h>char a[55];char b[55];struct node{ int data; struct node *l, *r;};struct node *creat(int n, char *a, char *b)//重建二叉树{ int i; struct node *root; if(n == 0) return NULL; root = (struct node *) malloc(sizeof(struct node)); root -> data = a[0]; for(i = 0; i < n; i++) { if(b[i] == a[0]) break; } root -> l = creat(i, a+1, b); root -> r = creat(n-1-i, a+i+1, b+i+1); return root;//重建完成};void cengxu(struct node *root)//求层序遍历{ int in = 0, out = 0; struct node *p[100];//用于储存每一层的数据 p[in++] = root; while(in > out) { if(p[out]) { printf("%c", p[out] -> data); p[in++] = p[out] -> l; p[in++] = p[out] -> r; } out++; }}int main(){ int t, n; scanf("%d", &t); while(t--) { scanf("%s%s",a , b); n = strlen(a); struct node *root; root = creat(n, a, b); cengxu(root); printf("/n"); } return 0;}新闻热点
疑难解答