现在的位置: 首页 > 综合 > 正文

Code[vs]1013 求先序排列

2018年04月29日 ⁄ 综合 ⁄ 共 931字 ⁄ 字号 评论关闭
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;
}

抱歉!评论已关闭.