1609. 前序和后序遍历

原题传送:AcWing 1609. 前序和后序遍历

假设一个二叉树上所有结点的权值都互不相同。

我们可以通过后序遍历和中序遍历来确定唯一二叉树。

也可以通过前序遍历和中序遍历来确定唯一二叉树。

但是,如果只通过前序遍历和后序遍历,则有可能无法确定唯一二叉树。

现在,给定一组前序遍历和后序遍历,请你输出对应二叉树的中序遍历。

如果树不是唯一的,则输出任意一种可能树的中序遍历即可。

输入格式

第一行包含整数 NNN ,表示结点数量。

第二行给出前序遍历序列。

第三行给出后序遍历序列。

一行中的数字都用空格隔开。

输出格式

首先第一行,如果树唯一,则输出 Yes,如果不唯一,则输出 No

然后在第二行,输出树的中序遍历。

注意,如果树不唯一,则输出任意一种可能的情况均可。

数据范围

1≤N≤301 \le N \le 301≤N≤30

输入样例1:

7
1 2 3 4 6 7 5
2 6 7 4 5 3 1

输出样例1:

Yes
2 1 6 4 7 3 5

输入样例2:

4
1 2 3 4
2 4 3 1

输出样例2:

No
2 1 3 4

思路:

暴搜前序遍历和后序遍历能构成树的方案,如果有大于1,退出循环,输出其中一种方案。

题解:

#include<bits/stdc++.h>using namespace std;const int N = 40;int n;
int pre[N], post[N];int dfs(int l1, int r1, int l2, int r2, string& in)
{if(l1 > r1)return 1;if(pre[l1] != post[r2])return 0;int cnt = 0;for(int i = l1; i <= r1; i++){string lin, rin;int lcnt = dfs(l1 + 1, i, l2, l2 + i - l1 - 1, lin);int rcnt = dfs(i + 1, r1, l2 + i - l1, r2 - 1, rin);if(lcnt && rcnt){in = lin + to_string(pre[l1]) + " " + rin;cnt += lcnt * rcnt;if(cnt > 1)break;}}return cnt;
}int main()
{   cin >> n;int root = 0;for(int i = 0; i < n; i++)cin >> pre[i];for(int i = 0; i < n; i++)cin >> post[i];string in;int cnt = dfs(0, n - 1, 0, n - 1, in);if(cnt == 1)cout << "Yes" << endl;elsecout << "No" << endl;in.pop_back();cout << in << endl;return 0;
}

【题解】【AcWing】1609. 前序和后序遍历相关推荐

  1. 1609. 前序和后序遍历

    假设一个二叉树上所有结点的权值都互不相同. 我们可以通过后序遍历和中序遍历来确定唯一二叉树. 也可以通过前序遍历和中序遍历来确定唯一二叉树. 但是,如果只通过前序遍历和后序遍历,则有可能无法确定唯一二 ...

  2. 根据前序和后序遍历构造二叉树(附前序中序代码)

    889. 根据前序和后序遍历构造二叉树 前序和中序 道理相同 改变一些细节就可以了,在最后附上了前序中序的代码 题目描述 返回与给定的前序和后序遍历匹配的任何二叉树. pre 和 post 遍历中的值 ...

  3. 二叉树前序中序后序_leetcode889_go_根据前序和后序遍历构造二叉树

    leetcode889_根据前序和后序遍历构造二叉树 01 - 题目 返回与给定的前序和后序遍历匹配的任何二叉树. pre 和 post 遍历中的值是不同的正整数. 示例:输入:pre = [1,2, ...

  4. [Leetcode][第889题][JAVA][根据前序和后序遍历构造二叉树][分治][递归]

    [问题描述][中等] [解答思路] copyOfRange class Solution {public TreeNode constructFromPrePost(int[] pre, int[] ...

  5. [算法] 已知前序和后序遍历,建立二叉树

    结点结构 typedef struct Node{char data;struct Node *left;struct Node *right; }Node; 已知前序和后序遍历,建立二叉树(不唯一, ...

  6. LeetCode根据前序与中序、中序与后序,前序与后序遍历序列构建二叉树

    根据前序与中序遍历序列构建二叉树 LeetCode题目来源 1.1 题目描述 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是 ...

  7. java二叉树合并_Java(树的前中后序遍历构造二叉树题型整合)前序和中序、中序和后序、前序和后序遍历序列构造二叉树算法整合归纳...

    前言 二叉树各种花里胡哨的算法题真的把我搞晕了,今天特地整理出一类有关二叉树的算法题,希望能帮助阅读到此文章的人,今后不再受此类题型的困扰. 一.题目类型 已知二叉树的两种遍历序列,请根据该序列构建二 ...

  8. 二叉树的的前序遍历和后序遍历(题型变种更新中)

    变形一 BM32 合并二叉树 描述 已知两颗二叉树,将它们合并成一颗二叉树.合并规则是:都存在的结点,就将结点值加起来,否则空的位置就由另一个树的结点来代替.例如: 两颗二叉树是:           ...

  9. 二叉树的前序、中序、后序遍历与创建

    #include <iostream> #include <string> #include <stack> using namespace std; struct ...

最新文章

  1. SSM-Spring+SpringMVC+MyBatis整合案例从0到1
  2. django入门三(视图)
  3. 谈谈Ext JS的组件——布局的使用方法续二
  4. C# 去除所有的html标签
  5. 2 小时学会 springboot ( 附实例讲解 )
  6. 阿里大数据中台12年建设经验的精华总结!一次性说清!
  7. cookie工作流程
  8. 训练集山准确率高测试集上准确率很低_拒绝DNN过拟合,谷歌准确预测训练集与测试集泛化差异,还开源了数据集 | ICLR 2019...
  9. Android异常总结---3.Failed to install *.apk on device 'emulator-5554': timeout 错误提示:
  10. Python标准模块--multiprocessing
  11. 【项目3-2】多肉植物网站
  12. golang 生成定单号
  13. 计算机术语中cook,计算机中的cookie是什么意思
  14. 奥维地图数据格式_奥维地图导入文件显示 奥维地图支持什么格式文件
  15. 电脑cpu测试软件 95,Prime95(CPU稳定性测试)
  16. 中国天气网城市代码python字典的生成方法分享(1)
  17. 一文带你读懂何为 macOS App 公证,以及如何自动化实现
  18. 谁锁了我的帐号?(AD账号的锁定状态查询)
  19. 逻辑推理:张老师的生日
  20. [Java Web]AJAX Axios | 一种结合HTML来取代传统JSP的技术

热门文章

  1. 微信中如何做到访问app的下载链接直接跳到默认浏览器去执行下载
  2. 全国计算机等级考试二级Python精品题库学习笔记1
  3. 阿里开发者们的第11个感悟:我们不一定知道正确的道路是什么,但却不要在错误的道路上走的太远...
  4. Android热修复原理(HotFix)初涉
  5. android 自定义 seekbar,Android自定义控件 带文字提示的SeekBar
  6. android 悬停浮动框,Android滑动到顶部悬停
  7. Hosts文件位置及介绍
  8. Android布局之GridLayout的使用总结
  9. 原来iMindMap还有这样一个视图
  10. 未来Web3将用邮箱或密码登陆?