Problem Description
已知一棵二叉树的中序遍历和后序遍历,求二叉树的先序遍历
Input
输入数据有多组,第一行是一个整数t (t<1000),代表有t组测试数据。每组包括两个长度小于50 的字符串,第一个字符串表示二叉树的中序遍历序列,第二个字符串表示二叉树的后序遍历序列。
Output
输出二叉树的先序遍历序列
Example Input
2 dbgeafc dgebfca lnixu linux
Example Output
abdegcf xnliu
01 | #include<stdio.h> |
02 | #include<stdlib.h> |
03 | #include<string.h> |
04 | char a[10010], b[10010]; |
05 | struct node |
06 | { |
07 | char date; |
08 | struct node *l, *r; |
09 | }; |
10 | struct node *creat( int n, char a[], char b[]) |
11 | { |
12 | if (n <= 0) return NULL; |
13 | struct node *root; |
14 | root = ( struct node*) malloc ( sizeof ( struct node)); |
15 | root->date = b[n-1]; |
16 | int i; |
17 | for (i = 0; i < n; i++) |
18 | { |
19 | if (a[i] == b[n-1]) break ; |
20 | } |
21 | root->l = creat(i, a, b); |
22 | root->r = creat(n-1-i, a+i+1, b+i); |
23 | return root; |
24 | } |
25 | void order( struct node *root) |
26 | { |
27 | if (root) |
28 | { |
29 | printf ( "%c" , root->date); |
30 | order(root->l); |
31 | order(root->r); |
32 | } |
33 | } |
34 | int main() |
35 | { |
36 | int t, len; |
37 | scanf ( "%d" , &t); |
38 | while (t--) |
39 | { |
40 | scanf ( "%s%s" , a, b); |
41 | len = strlen (a); |
42 | struct node *root; |
43 | root = creat(len, a, b); |
44 | order(root); |
45 | printf ( "\n" ); |
46 | } |
47 | return 0; |
48 | } |