【题解】【AcWing】1609. 前序和后序遍历
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. 前序和后序遍历相关推荐
- 1609. 前序和后序遍历
假设一个二叉树上所有结点的权值都互不相同. 我们可以通过后序遍历和中序遍历来确定唯一二叉树. 也可以通过前序遍历和中序遍历来确定唯一二叉树. 但是,如果只通过前序遍历和后序遍历,则有可能无法确定唯一二 ...
- 根据前序和后序遍历构造二叉树(附前序中序代码)
889. 根据前序和后序遍历构造二叉树 前序和中序 道理相同 改变一些细节就可以了,在最后附上了前序中序的代码 题目描述 返回与给定的前序和后序遍历匹配的任何二叉树. pre 和 post 遍历中的值 ...
- 二叉树前序中序后序_leetcode889_go_根据前序和后序遍历构造二叉树
leetcode889_根据前序和后序遍历构造二叉树 01 - 题目 返回与给定的前序和后序遍历匹配的任何二叉树. pre 和 post 遍历中的值是不同的正整数. 示例:输入:pre = [1,2, ...
- [Leetcode][第889题][JAVA][根据前序和后序遍历构造二叉树][分治][递归]
[问题描述][中等] [解答思路] copyOfRange class Solution {public TreeNode constructFromPrePost(int[] pre, int[] ...
- [算法] 已知前序和后序遍历,建立二叉树
结点结构 typedef struct Node{char data;struct Node *left;struct Node *right; }Node; 已知前序和后序遍历,建立二叉树(不唯一, ...
- LeetCode根据前序与中序、中序与后序,前序与后序遍历序列构建二叉树
根据前序与中序遍历序列构建二叉树 LeetCode题目来源 1.1 题目描述 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是 ...
- java二叉树合并_Java(树的前中后序遍历构造二叉树题型整合)前序和中序、中序和后序、前序和后序遍历序列构造二叉树算法整合归纳...
前言 二叉树各种花里胡哨的算法题真的把我搞晕了,今天特地整理出一类有关二叉树的算法题,希望能帮助阅读到此文章的人,今后不再受此类题型的困扰. 一.题目类型 已知二叉树的两种遍历序列,请根据该序列构建二 ...
- 二叉树的的前序遍历和后序遍历(题型变种更新中)
变形一 BM32 合并二叉树 描述 已知两颗二叉树,将它们合并成一颗二叉树.合并规则是:都存在的结点,就将结点值加起来,否则空的位置就由另一个树的结点来代替.例如: 两颗二叉树是: ...
- 二叉树的前序、中序、后序遍历与创建
#include <iostream> #include <string> #include <stack> using namespace std; struct ...
最新文章
- SSM-Spring+SpringMVC+MyBatis整合案例从0到1
- django入门三(视图)
- 谈谈Ext JS的组件——布局的使用方法续二
- C# 去除所有的html标签
- 2 小时学会 springboot ( 附实例讲解 )
- 阿里大数据中台12年建设经验的精华总结!一次性说清!
- cookie工作流程
- 训练集山准确率高测试集上准确率很低_拒绝DNN过拟合,谷歌准确预测训练集与测试集泛化差异,还开源了数据集 | ICLR 2019...
- Android异常总结---3.Failed to install *.apk on device 'emulator-5554': timeout 错误提示:
- Python标准模块--multiprocessing
- 【项目3-2】多肉植物网站
- golang 生成定单号
- 计算机术语中cook,计算机中的cookie是什么意思
- 奥维地图数据格式_奥维地图导入文件显示 奥维地图支持什么格式文件
- 电脑cpu测试软件 95,Prime95(CPU稳定性测试)
- 中国天气网城市代码python字典的生成方法分享(1)
- 一文带你读懂何为 macOS App 公证,以及如何自动化实现
- 谁锁了我的帐号?(AD账号的锁定状态查询)
- 逻辑推理:张老师的生日
- [Java Web]AJAX Axios | 一种结合HTML来取代传统JSP的技术
热门文章
- 微信中如何做到访问app的下载链接直接跳到默认浏览器去执行下载
- 全国计算机等级考试二级Python精品题库学习笔记1
- 阿里开发者们的第11个感悟:我们不一定知道正确的道路是什么,但却不要在错误的道路上走的太远...
- Android热修复原理(HotFix)初涉
- android 自定义 seekbar,Android自定义控件 带文字提示的SeekBar
- android 悬停浮动框,Android滑动到顶部悬停
- Hosts文件位置及介绍
- Android布局之GridLayout的使用总结
- 原来iMindMap还有这样一个视图
- 未来Web3将用邮箱或密码登陆?