首页 > 学院 > 开发设计 > 正文

求二叉树的层次遍历

2019-11-08 19:41:54
字体:
来源:转载
供稿:网友

求二叉树的层次遍历 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;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表