UVa536 Tree Recovery (二叉树遍历)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVa536 Tree Recovery (二叉树遍历)相关的知识,希望对你有一定的参考价值。
链接: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 }
以上是关于UVa536 Tree Recovery (二叉树遍历)的主要内容,如果未能解决你的问题,请参考以下文章
习题6_3 二叉树重建(Tree Recovery, ULM 1997, UVa536)