您的位置:首页 > 其它

P1030 求先序排列

2018-02-02 10:04 197 查看
题目描述

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

输入输出格式

输入格式:

2行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列。

输出格式:

1行,表示一棵二叉树的先序。

输入输出样例

输入样例#1:

BADC

BDCA

输出样例#1:

ABCD

记住几个二叉树性质:

后序遍历:最后一个一定是根

先序遍历:第一个一定是根

中序遍历:根在中间,可以一刀两断,且为二叉搜索树的遍历方式

这题的话,每次取后序遍历的最后一个输出(根),然后在中序遍历中找到其位置,一刀两断将树劈成两份,继续递归。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define inf 99999999

string in,after;

void dg(string in,string after)
{
int len=in.size();
if(len<=0)return;
char ch=after[len-1];
cout<<ch;
int k=in.find(ch);
dg(in.substr(0,k),after.substr(0,k));
dg(in.substr(k+1),after.substr(k,len-1-k));
}

int main()
{
cin>>in>>after;
dg(in,after);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: