链接:http://acm.hust.edu.cn/vjudge/problem/19645分析:三种树的遍历方式中除了中序外再知道另外遍历方式得到的序列就可以唯一确定一棵二叉树。先序:先打印根再遍历左右子树。中序:先遍历左子树,然后打印根,再遍历右子树。后序:先遍历左右子树,最后打印根。
1 #include <cstdio> 2 #include <cstring> 3 4 char pre_order[30], in_order[30]; 5 6 void dfs(int L1, int R1, int L2, int R2) { 7 char root = pre_order[L1]; 8 int p = L2; 9 while (in_order[p] != root) p++; 10 int cnt1 = p - L2, cnt2 = R2 - p; 11 if (cnt1) dfs(L1 + 1, L1 + cnt1, L2, p - 1); 12 if (cnt2) dfs(R1 - cnt2 + 1, R1, p + 1, R2); 13 printf("%c", root); 14 } 15 16 int main() { 17 while (scanf("%s", pre_order) == 1) { 18 scanf("%s", in_order); 19 int n = strlen(pre_order); 20 dfs(0, n - 1, 0, n - 1); 21 printf("\n"); 22 } 23 return 0; 24 }
时间: 2024-10-14 10:07:16