Code[vs]1013 求先序排列

Description

给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度<=8)。

输入描述 Input Description

两个字符串,分别是中序和后序(每行一个)

输出描述 Output Description

一个字符串,先序

样例输入 Sample Input

BADC

BDCA

样例输出 Sample Output

ABCD

数据范围及提示 Data Size & Hint




这道题就是裸裸的递归题目,可以用来复习数据结构的基础知识用,如果我们知道了一个二叉树的遍历方式有:1,先序,2.中序,3.后序,

这三个先后都是对于根节点来说的,也就是说,


如果先序遍历的话,输出顺序是这样的,根节点,左子树,右子树。

如果中序遍历的话,输出顺序是这样的,左子树,根节点,右子树

如果是后序遍历的话,输出顺序是这样的,左子树,右子数,根节点。


 所以根据这个特点,对于后序遍历的根节点,我们可以做这样的处理,他的最后一个字符就是该二叉树的根节点root,

然后再找到中序遍历中,该字符所出现的位置,把中序遍历分成了两个部分,左边为左子树,右边为右子树

然后依次用这个方法不断的递归,直到该节点为叶子节点为止了~


代码:

# include<cstdio>
# include<iostream>

using namespace std;

void fun(string s1,string s2)
{
    int m=s1.find(s2[s2.size()-1]);
    string str1,str2,str3,str4;
    str1.assign(s1,0,m);
    str2.assign(s1,m+1,s1.size()-m-1);
    str3.assign(s2,0,str1.size());
    str4.assign(s2,str1.size(),str2.size());

    cout<<s2[s2.size()-1];

    if( str1.size()>=1 )
        fun(str1,str3);
    if( str2.size()>=1 )
        fun(str2,str4);

}
int main(void)
{
    string s1,s2;
    while( cin>>s1>>s2 )
    {
   fun(s1,s2);
    cout<<endl;
    }
    return 0;
}








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值