luogu1030 求先序排列

https://www.luogu.org/problemnew/show/1030

题目描述

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

输入输出格式

输入格式:

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

输出格式:

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

输入输出样例

输入样例#1:

BADC
BDCA

输出样例#1:

ABCD
 1 #include<cstdio>
 2 #include<string>
 3 #include<iostream>
 4 using namespace std;
 5 string mx,hx;
 6 void dfs(string mx,string hx)
 7 //例 中序ACGDBHZKX 后序CDGAHXKZB
 8 {
 9     if(hx.size()>0)
10     {
11         char k=hx[hx.size()-1];//后序遍历的最后一个是根 此处为B
12         cout<<k;//求先序遍历 先输出根
13         int mid=mx.find(k);//在中序遍历中找到根,从根处把中序遍历的字符串分为左右子树
14         dfs(mx.substr(0,mid),hx.substr(0,mid));
15         //左子树 对应中序 ACGD 后序 CDGA
16         dfs(mx.substr(mid+1),hx.substr(mid,hx.size()-mid-1));
17         //右子树 对应中序 HZKX 后序 HXKZ
18         //递归求解
19     }
20
21 }
22 int main()
23 {
24     cin>>mx;
25     cin>>hx;
26     dfs(mx,hx);
27     return 0;
28 }

P.S

①已知中序与后序,求先序↑

②已知先序与中序,求后序

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<string>
 4 using namespace std;
 5 string fx,mx;
 6 void dfs(string fx,string mx)
 7 //例 先序 abdec 中序 dbeac
 8 {
 9     if(mx.size()>0)
10     {
11         char root=fx[0];//先序排列的第一个元素是根 此处为a
12         int k=mx.find(root);//在中序遍历中找到根
13         dfs(fx.substr(1,k),mx.substr(0,k));
14         //左子树 中序 dbe 对应 先序 bde
15         dfs(fx.substr(k+1),mx.substr(k+1,mx.size()-k-1));
16         //右子树 中序 c 对应 先序 c
17         cout<<root;//求后序遍历 最后输出根节点
18     }
19 }
20 int main()
21 {
22     cin>>fx;
23     cin>>mx;
24     dfs(fx,mx);
25     return 0;
26 }

原文地址:https://www.cnblogs.com/Loi-Brilliant/p/8213293.html

时间: 2024-08-11 12:39:19

luogu1030 求先序排列的相关文章

算法训练 求先序排列

问题描述 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度<=8). 输入格式 两行,每行一个字符串,分别表示中序和后序排列 输出格式 一个字符串,表示所求先序排列 样例输入 BADC BDCA 样例输出 ABCD 1 import java.math.BigInteger; 2 import java.util.Arrays; 3 import java.util.Scanner; 4 5 6 public class Main { 7 static S

蓝桥 - 求先序排列(知中序和后序求先序)

Description 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度<=8). Input 两行,每行一个字符串,分别表示中序和后序排列 Output 一个字符串,表示所求先序排列 Sample Input BADC BDCA Sample Output ABCD 1 #include <bits/stdc++.h> 2 const int INF=0x3f3f3f3f; 3 typedef long long LL; 4 const doub

洛谷 P1030 求先序排列 Label:None

题目描述 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度<=8). 输入输出格式 输入格式: 2行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列. 输出格式: 1行,表示一棵二叉树的先序. 输入输出样例 输入样例#1: BADC BDCA 输出样例#1: ABCD 代码 1 #include<iostream> 2 #include<cstring> 3 #include<algorithm> 4 #inclu

codevs 1013 求先序排列(二叉树遍历)

传送门 Description 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度<=8). Input 两个字符串,分别是中序和后序(每行一个) Output 一个字符串,为二叉树的先序序列 Sample Input BADC BDCA Sample Output ABCD 思路 我们知道,前序遍历(PreOrder):根节点->左子树->右子树:中序遍历(InOrder):左子树->根节点->右子树:(PostOrder)后序遍历:左

codevs 1013 求先序排列 2001年NOIP全国联赛普及组 x

题目描述 Description 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度<=8). 输入描述 Input Description 两个字符串,分别是中序和后序(每行一个) 输出描述 Output Description 一个字符串,先序 样例输入 Sample Input BADC BDCA 样例输出 Sample Output ABCD 数据范围及提示 Data Size & Hint 分类标签 Tags 点此展开 #include<

求先序排列

时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度<=8). 输入描述 Input Description 两个字符串,分别是中序和后序(每行一个) 输出描述 Output Description 一个字符串,先序 样例输入 Sample Input BADC BDCA 样例输出 Sample Output ABCD 数据范

2001求先序排列

题目描述 Description 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度<=8). 输入描述 Input Description 两个字符串,分别是中序和后序(每行一个) 输出描述 Output Description 一个字符串,先序 样例输入 Sample Input BADC BDCA 样例输出 Sample Output ABCD 数据范围及提示 Data Size & Hint 题解: 树形搜索. 用后序遍历确定根节点,中序遍历确定

codevs 1013 求先序排列

题目链接:http://codevs.cn/problem/1013/ 题目描述 Description 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度<=8). 输入描述 Input Description 两个字符串,分别是中序和后序(每行一个) 输出描述 Output Description 一个字符串,先序 样例输入 Sample Input BADC BDCA 样例输出 Sample Output ABCD 1 #include<stdio.

P1030 求先序排列

题目描述 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度<=8). 输入输出格式 输入格式: 2行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列. 输出格式: 1行,表示一棵二叉树的先序. 输入输出样例 输入样例#1: BADC BDCA 输出样例#1: ABCD [解析]后序最后一个一定是根,找到根在中序中的位置,递归构建左右子树.[代码] #include <cstdio> #include <cstring> #in