码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 2255 Tree Recoveryw(二叉树)

时间:2019-04-19 23:59:45      阅读:298      评论:0      收藏:0      [点我收藏+]

标签:etc   多个   c代码   代码   out   题目   oid   break   ref   

题目原网址:http://poj.org/problem?id=2255

 

题目中文翻译:

Description

       小瓦伦丁非常喜欢玩二叉树。 她最喜欢的游戏是用大写字母构造的随机二叉树。

这是她的一个创作的例子:

                                               D
                                              / \
                                             /   \
                                            B     E
                                           / \     \
                                          /   \     \
                                         A     C     G
                                                    /
                                                   /
                                                  F

    为了为后代记录她的树,她为每棵树写了两个字符串:前序遍历(根,左子树,右子树)和中序遍历(左子树,根,右子树)。 对于上面绘制的树,前序遍历是DBACEGF,中序遍历是ABCDEFG。

她认为这样一对字符串会提供足够的信息来重建树(但她从未尝试过)。

现在,多年以后,再次看到这些字符串,她意识到重建树确实是可能的,因为她从未在同一棵树上使用过两次相同的字母。

然而,手工重建很快就变得单调乏味。

所以现在她要求你写一个为她工作的程序!

Input

输入将包含一个或多个测试用例。

每个测试用例由一行包含两个字符串preord和inord,表示二叉树的前序遍历和中序遍历。 两个字符串都由不重复的大写字母组成。 (因此它们不超过26个字符。)

输入由文件结束(EOF)终止。

Output

对于每个测试用例,恢复瓦伦丁的二叉树并打印一行树的后序遍历(左子树,右子树,根)。

Sample Input

DBACEGF ABCDEFG

BCAD CBAD

Sample Output

ACBFGED

CDAB

 解题思路:

通过先序遍历找到根,再根据中序遍历性质(一个节点的左儿子一定在它前面出现,而右儿子一定在它后面),找出这个节点的左右儿子,建树,最后输出后序遍历.

AC代码:

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<string>
 4 #include<algorithm>
 5 #include<cstring>
 6 
 7 using namespace std;
 8 
 9 char q[30],z[30];
10 int xb;
11 
12 void work(int l,int r) {
13     char a;
14     int i;
15     if(l > r) return ;
16     a = q[xb++];
17     for(i = l;i <= r; i++)
18         if(a == z[i])
19             break;
20     work(l,i - 1);
21     work(i + 1,r);
22     cout << a;
23 }
24 
25 int main()
26 {
27     while(scanf("%s%s",q,z) != EOF) {
28         getchar();
29         int len = strlen(z);
30         xb = 0;
31         work(0,len-1);
32         cout << endl;
33     }
34     
35     return 0;
36 }

 

POJ 2255 Tree Recoveryw(二叉树)

标签:etc   多个   c代码   代码   out   题目   oid   break   ref   

原文地址:https://www.cnblogs.com/lipeiyi520/p/10739498.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!