二叉树的遍历1和二叉树的遍历2

二叉树的遍历1

Description

小Valentine非常喜欢玩二叉树,她喜欢的游戏是随意构造一颗二叉树,用大写字母编号标识结点。下图是她构造的二叉树中的一棵:

                              D

                             / \     

                            B   E   

                          / \    \                          

                        A     C   G

                                 /                                  

                                F

为了向她的后代记录她所创建的树,她给每棵树写下两串字符串,表示先序遍历(根,左子树,右子树)和中序遍历(左子树,根,右子树)的结果。

对于上面的树,先序遍历的结果是DBACEGF,中序遍历的结果是ABCDEFG。

她认为这样的一对字符串给出了重构这棵树的足够的信息(但她从来没有尝试去重构二叉树)。

过了好些年,她认识到重构这些树的确是可能的。对于同一棵树,同一个字母不会用两次。

然而,如果手工完成重构二叉树,那是非常乏味的。因此,请您编写一个程序来为她完成这一项工作。

Input

输入包含一个或多个测试用例。每个测试用例一行,给出两个字符串,表示对二叉树进行先序遍历和中序遍历的结果。这两个字符串都是由大写字母组成(因此它们的长度不超过26)。

Output

将每个测试用例转化为Valentine的二叉树,并在一行中输出树的后序遍历(左子树,右子树,根)的结果。

DBACEGF ABCDEFG
BCAD CBAD
  • Sample Input
ACBFGED
CDAB
  • Sample Output
  • #include<bits/stdc++.h>
    using namespace std;
    string a, b; 
    void tree(string c,string d){
        if( c.size() <= 0 ) {
            return ; 
        }
        int p = d.find(c[0]);
        tree(c.substr( 1, p ),d.substr( 0, p ) ); 
        tree(c.substr( p + 1 ),d.substr( p + 1 )); 
        cout << c[0]; 
    }
    int main(){
        while(cin>>a>>b){
            tree(a,b); 
            cout<<endl;
        }
        return 0;
    }

    二叉树的遍历2

  • 小Valentine非常喜欢玩二叉树,她喜欢的游戏是随意构造一颗二叉树,用大写字母编号标识结点。下图是她构造的二叉树中的一棵:

                                  D

                                 / \ 

                                B   E 

                              / \    \  

                            A     C   G

                                     /

                                    F

    为了向她的后代记录她所创建的树,她给每棵树写下两串字符串,表示后序遍历(左子树,右子树,根)和中序遍历(左子树,根,右子树)的结果。

    对于上面的树,后序遍历的结果是ACBFGED,中序遍历的结果是ABCDEFG。

    她认为这样的一对字符串给出了重构这棵树的足够的信息(但她从来没有尝试去重构二叉树)。

    过了好些年,她认识到重构这些树的确是可能的。对于同一棵树,同一个字母不会用两次。

    然而,如果手工完成重构二叉树,那是非常乏味的。因此,请您编写一个程序来为她完成这一项工作。

  • Input

    输入包含一个或多个测试用例。每个测试用例一行,给出两个字符串,表示对二叉树进行后序遍历和中序遍历的结果。这两个字符串都是由大写字母组成(因此它们的长度不超过26)。

    Output

    将每个测试用例转化为Valentine的二叉树,并在一行中输出树的先序遍历(根,左子树,右子树)的结果。

  • Sample Input
  • ACBFGED ABCDEFG CDAB CBAD
  • Sample Output
    DBACEGF BCAD
  • #include<bits/stdc++.h>
    using namespace std;
    string a,b;
    void dp(string a,string b){
        int z=a.size();
        if(a.size()<=0){
            return ;
        } 
        int t=b.find(a[z-1]);
        cout<<a[z-1];
        dp(a.substr(0,t),b.substr(0,t));
        dp(a.substr(t,z-t-1),b.substr(t+1));
    }
    int main(){
        while(cin>>a>>b){
            dp(a,b);
            cout<<endl;
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值