Problem Description
输入二叉树的先序遍历序列和中序遍历序列,输出该二叉树的后序遍历序列。
Input
第一行输入二叉树的先序遍历序列;
第二行输入二叉树的中序遍历序列。
第二行输入二叉树的中序遍历序列。
Output
输出该二叉树的后序遍历序列。
Example Input
ABDCEF BDAECF
Example Output
DBEFCA
01 | #include<stdio.h> |
02 | #include<stdlib.h> |
03 | #include<string.h> |
04 | char a[110], b[110]; |
05 | struct node |
06 | { |
07 | char c; |
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->c = a[0]; |
16 | int i; |
17 | for (i = 0; i < n; i++) |
18 | { |
19 | if (a[0] == b[i]) break ; |
20 | } |
21 | root->l = creat(i, a+1, b); |
22 | root->r = creat(n-1-i, a+1+i, b+1+i); |
23 | return root; |
24 | } |
25 | void hou( struct node *root) |
26 | { |
27 | if (root) |
28 | { |
29 | hou(root->l); |
30 | hou(root->r); |
31 | printf ( "%c" , root->c); |
32 | } |
33 | } |
34 | int main() |
35 | { |
36 | int len; |
37 | scanf ( "%s%s" , a, b); |
38 | len = strlen (a); |
39 | struct node *root; |
40 | root = creat(len, a, b); |
41 | hou(root); |
42 | printf ( "\n" ); |
43 | return 0; |
44 | } |
45 |