首页 > 代码库 > POJ 2255 Tree Recovery

POJ 2255 Tree Recovery

主要是递归思想吧,然后找到边界条件,推了好久。

http://poj.org/problem?id=2255

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 
 5 string str1, str2;
 6 void recovery(int Lstr1, int Rstr1, int Lstr2, int Rstr2) {
 7     if (Lstr2 == Rstr2)
 8     {
 9         cout << str2[Lstr2];
10         return;
11     }
12     if (Lstr2 > Rstr2)//这是中止条件
13         return;
14     //找到根节点
15     int i = Lstr2;
16     while (str1[Lstr1] != str2[i])
17         i++;
18     int mov = i - Lstr2 - 1;
19     //下面是分为两颗子数
20     recovery(Lstr1 + 1, Lstr1 + 1 + mov, Lstr2, i - 1);
21     recovery(Lstr1 + 1 + mov + 1, Rstr1, i + 1, Rstr2);
22 
23 
24     cout << str2[i];
25     return;
26 }
27 
28 int main() {
29     while (cin >> str1 >> str2) {
30         recovery(0, str1.size() - 1, 0, str2.size() - 1);
31         cout << endl;
32     }
33     return 0;
34 }

 

POJ 2255 Tree Recovery