Problem Description
已知一颗二叉树的中序遍历序列和后序遍历序列,求二叉树的深度。
Input
输入数据有多组,输入T,代表有T组数据。每组数据包括两个长度小于50的字符串,第一个字符串表示二叉树的中序遍历,第二个表示二叉树的后序遍历。
Output
输出二叉树的深度。
Example Input
2 dbgeafc dgebfca lnixu linux
Example Output
4 3
01 | #include<stdio.h> |
02 | #include<string.h> |
03 | #include<stdlib.h> |
04 | char a[55], b[55]; |
05 | struct node |
06 | { |
07 | char date; |
08 | struct node *l, *r; |
09 | }; |
10 | struct node *creat( char a[], char b[], int n) |
11 | { |
12 | struct node *root; |
13 | if (n == 0) return NULL; |
14 | else |
15 | { |
16 | root = ( struct node *) malloc ( sizeof ( struct node)); |
17 | root->date = b[n-1]; |
18 | int i; |
19 | for (i = 0; i < n; i++) |
20 | { |
21 | if (a[i] == b[n-1]) |
22 | { |
23 | break ; |
24 | } |
25 | } |
26 | root->l = creat(a, b, i); |
27 | root->r = creat(a+1+i, b+i, n-1-i); |
28 | return root; |
29 | } |
30 | } |
31 | int high( struct node *root) |
32 | { |
33 | int h, lh, rh; |
34 | if (root == NULL) |
35 | { |
36 | h = 0; |
37 | } |
38 | else |
39 | { |
40 | lh = high(root->l); |
41 | rh = high(root->r); |
42 | if (lh > rh) |
43 | h = lh + 1; |
44 | else |
45 | h = rh + 1; |
46 | } |
47 | return h; |
48 | } |
49 | int main() |
50 | { |
51 | int t, n, h; |
52 | scanf ( "%d" , &t); |
53 | while (t--) |
54 | { |
55 | scanf ( "%s%s" , a, b); |
56 | n = strlen (a); |
57 | struct node *root; |
58 | root = creat(a, b, n); |
59 | h = high(root); |
60 | printf ( "%d\n" , h); |
61 | } |
62 | return 0; |
63 | } |
64 |
65 |