Code[vs]1013 求先序排列

来源:互联网 发布:windows操作系统界面 编辑:程序博客网 时间:2024/06/08 11:33
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