2015 HUAS Summer Training#2 D

题目:

Description

Little Valentine liked playing with binary trees very much. Her favorite game was constructing randomly looking binary trees with capital letters in the nodes.

This is an example of one of her creations:

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

To record her trees for future generations, she wrote down two strings for each tree: a preorder traversal (root, left subtree, right subtree) and an inorder traversal (left subtree, root, right subtree).

For the tree drawn above the preorder traversal is DBACEGF and the inorder traversal is ABCDEFG.

She thought that such a pair of strings would give enough information to reconstruct the tree later (but she never tried it).

Now, years later, looking again at the strings, she realized that reconstructing the trees was indeed possible, but only because she never had used the same letter twice in the same tree.

However, doing the reconstruction by hand, soon turned out to be tedious.

So now she asks you to write a program that does the job for her!

Input Specification

The input file will contain one or more test cases. Each test case consists of one line containing two strings preord and inord, representing the preorder traversal and inorder traversal of a binary tree. Both strings consist of unique capital letters. (Thus they are not longer than 26 characters.)

Input is terminated by end of file.

Output Specification

For each test case, recover Valentine‘s binary tree and print one line containing the tree‘s postorder traversal (left subtree, right subtree, root).

题目大意:给你树的先序遍历和中序遍历,要你输出后序遍历。

解题思路:给个结构体有树的根 左子树和右子数。用递归把树构建起来。在输出。

代码:

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 const int maxn=30;
 5 struct  shu
 6 {
 7     char a;
 8     shu* l;
 9     shu* r;
10 }b[maxn];
11 shu* goujianshu(shu* d,char* q,char* w,int n)
12 {
13     int i;
14     if(n==0)
15         return NULL;
16     for(i=0;i<n;i++)
17     {
18         if(q[0]==w[i])
19         {
20             d->a=q[0];
21             d->l=goujianshu(d+1,q+1,w,i);
22             d->r=goujianshu(d+1+i,q+i+1,w+i+1,n-i-1);
23         }
24     }
25     return d;
26 }
27 void houxu(shu* d)
28 {
29     if(d==NULL)
30         return;
31     houxu(d->l);
32     houxu(d->r);
33     cout<<char(d->a);
34 }
35 int main()
36 {
37     char e[maxn],t[maxn];
38     while(cin>>e>>t)
39     {
40         goujianshu(b,e,t,strlen(e));
41         houxu(b);
42         cout<<endl;
43     }
44     return 0;
45 }
时间: 2024-10-08 02:03:35

2015 HUAS Summer Training#2 D的相关文章

2015 HUAS Summer Training#2~C

Description 某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报到三的出列,剩下的向小序号方向靠拢,继续从头开始进行一至二报数...,以后从头开始轮流进行一至二报数.一至三报数直到剩下的人数不超过三人为止. Input 本题有多个测试数据组,第一行为组数N,接着为N行新兵人数,新兵人数不超过5000. Output 共有N行,分别对应输入的新兵人数,每行输出剩下

2015 HUAS Summer Training#2 F

题目: Description A robot has to patrol around a rectangular area which is in a form of mxn grid (m rows and n columns). The rows are labeled from 1 to m. The columns are labeled from 1 to n. A cell (i, j) denotes the cell in row i and column j in the

2015 HUAS Summer Training#2 B

题目: Description Two bored soldiers are playing card war. Their card deck consists of exactly n cards, numbered from 1 to n, all values are different. They divide cards between them in some manner, it's possible that they have different number of card

2015 HUAS Summer Training#2 G

题目: Description Due to recent rains, water has pooled in various places in Farmer John's field, which is represented by a rectangle of N x M (1 <= N <= 100; 1 <= M <= 100) squares. Each square contains either water ('W') or dry land ('.'). Far

2015 HUAS Summer Training#1 B

题目: A Ducci sequence is a sequence of n-tuples of integers. Given an n-tuple of integers (a1, a2, ... , an), the next n-tuple in the sequence is formed by taking the absolute differences of neighboring integers: ( a1, a2, ... , an)  (| a1 - a2|,| a2 

2015 HUAS Summer Training#2 A

题目: You are given a string consisting of parentheses () and []. A string of this type is said to be correct: (a) if it is the empty string (b) if A and B are correct, AB is correct, (c) if A is correct, (A ) and [A ] is correct. Write a program that

2015 HUAS Summer Training#1~D

10763 Foreign Exchange Your non-profit organization (iCORE - international Confederation of Revolver Enthusiasts) coordinates a very successful foreign student exchange program. Over the last few years, demand has sky-rocketed and now you need assist

2015 UESTC Winter Training #8【The 2011 Rocky Mountain Regional Contest】

2015 UESTC Winter Training #8 The 2011 Rocky Mountain Regional Contest Regionals 2011 >> North America - Rocky Mountain 开始时貌似是UVAlive挂了,无论交什么都WA,后来转战HDU 这次水题比较多,其中B题据说有更加高级的方法. G题WA了两发,才发现竟然没有输出Case!!! 未完成:D F H I J A - Iterated Difference 水题,模拟迭代即可

2015 UESTC Winter Training #6【Regionals 2010 &gt;&gt; North America - Rocky Mountain】

2015 UESTC Winter Training #6 Regionals 2010 >> North America - Rocky Mountain A - Parenthesis 给一个长度不多于1000的表达式,只包含小写字母,加法运算,省略乘号的乘法运算和括号,输出去掉多余括号的表达式 括号匹配可以使用栈操作,只有两种情况可以去掉这一对括号: 左括号的左边是左边界.加法符号.左括号,并且右括号右边是有右边界.加法符号.右括号 如果括号内没有加法运算(括号内的括号里,也就是下一级括