• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
scorpiorax
博客园    首页    新随笔    联系   管理    订阅  订阅
洛谷P1030求先序排列

题目描述

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

输入输出格式

输入格式:

 

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

 

输出格式:

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

 

输入输出样例

输入样例#1: 复制
BADC
BDCA
输出样例#1: 复制
ABCD

 

****深度优先搜索,首先我们要知道一点,后序排列的最后一个点就是根所以根据中序排列我们一点点去推根,从而得到前序排列

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<cmath>
 5 using namespace std;
 6 int i,j,l;
 7 char c[10],s[10];
 8 int find(char d)
 9 {
10     for(int i = 0;i <= l - 1;i++)
11     {
12         if(c[i] == d)
13         {
14             return i;
15          } 
16     }
17 }
18 void dfs(int t,int r,int b,int e)
19 {
20     int n = find(s[e]); 
21     printf("%c",s[e]);
22     if(n > t) //左子树 
23     dfs(t,n- 1,b,e - r + n - 1); //右子树的数量是r - n 
24     if(n < r) //右子树 
25     dfs(n + 1,r,b + n - t,e - 1); //左子树的数量n - t 
26 }
27 int main()
28 {
29     scanf("%s",c);
30     scanf("%s",s);
31     l = strlen(s);
32     dfs(0,l - 1,0,l - 1);
33     return 0;
34 }

 

posted on 2018-11-08 23:05  scorpiorax  阅读(371)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3