PAT 甲级 1043 Is It a Binary Search Tree
https://pintia.cn/problem-sets/994805342720868352/problems/994805440976633856
A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties:
- The left subtree of a node contains only nodes with keys less than the node's key.
 - The right subtree of a node contains only nodes with keys greater than or equal to the node's key.
 - Both the left and right subtrees must also be binary search trees.
 
If we swap the left and right subtrees of every node, then the resulting tree is called the Mirror Image of a BST.
Now given a sequence of integer keys, you are supposed to tell if it is the preorder traversal sequence of a BST or the mirror image of a BST.
Input Specification:
Each input file contains one test case. For each case, the first line contains a positive integer N (≤1000). Then N integer keys are given in the next line. All the numbers in a line are separated by a space.
Output Specification:
For each test case, first print in a line YES if the sequence is the preorder traversal sequence of a BST or the mirror image of a BST, or NO if not. Then if the answer is YES, print in the next line the postorder traversal sequence of that tree. All the numbers in a line must be separated by a space, and there must be no extra space at the end of the line.
Sample Input 1:
7
8 6 5 7 10 8 11
Sample Output 1:
YES
5 7 6 8 11 10 8
Sample Input 2:
7
8 10 11 8 6 7 5
Sample Output 2:
YES
11 8 10 7 5 6 8
Sample Input 3:
7
8 6 8 5 10 9 11
Sample Output 3:
NO
代码:
#include <bits/stdc++.h>
using namespace std; int N;
vector<int> pre, post;
bool isMirror; void solve(int root, int point) {
if(root > point) return ;
int i = root + 1, j = point;
if(!isMirror) {
while(i <= point && pre[root] > pre[i]) i ++;
while(j > root && pre[root] <= pre[i]) j --;
} else {
while(i <= point && pre[root] <= pre[i]) i ++;
while(j > root && pre[root] > pre[j]) j --;
} if(i - j != 1) return ;
solve(root + 1, j);
solve(i, point);
post.push_back(pre[root]);
} int main() {
scanf("%d", &N);
pre.resize(N);
for(int i = 0; i < N; i ++)
scanf("%d", &pre[i]);
solve(0, N - 1);
if(post.size() != N) {
isMirror = true;
post.clear();
solve(0, N - 1);
} if(post.size() == N) {
printf("YES\n");
z for(int i = 0; i < N; i ++) {
printf("%d", post[i]);
printf("%s", i != N - 1 ? " " : "\n");
}
} else printf("NO\n");
return 0;
}
先假设不是镜面的树 按照二叉搜索树的性质进行查找 并且按照后序遍历存起来 如果后序遍历存起来之后不是 N 个 则 isMirror = true 反着再查一遍 如果反过来查一遍之后 post.size() = N 的话说明是镜面的 如果还不是的话就是 NO 然后输出
期末被高数折磨的死去活来 好多天没摸键盘了 手好生 哭唧唧 今天想学学建树 期末期末快过去吧!!!
PAT 甲级 1043 Is It a Binary Search Tree的更多相关文章
- PAT 甲级 1043 Is It a Binary Search Tree (25 分)(链表建树前序后序遍历)*不会用链表建树 *看不懂题
		
1043 Is It a Binary Search Tree (25 分) A Binary Search Tree (BST) is recursively defined as a bina ...
 - 【PAT】1043 Is It a Binary Search Tree(25 分)
		
1043 Is It a Binary Search Tree(25 分) A Binary Search Tree (BST) is recursively defined as a binary ...
 - PAT甲级——A1043 Is It a Binary Search Tree
		
A Binary Search Tree (BST) is recursively defined as a binary tree which has the following propertie ...
 - PAT  Advanced 1043  Is It a Binary Search Tree (25) [⼆叉查找树BST]
		
题目 A Binary Search Tree (BST) is recursively defined as a binary tree which has the following proper ...
 - 【PAT甲级】1099 Build A Binary Search Tree (30 分)
		
题意: 输入一个正整数N(<=100),接着输入N行每行包括0~N-1结点的左右子结点,接着输入一行N个数表示数的结点值.输出这颗二叉排序树的层次遍历. AAAAAccepted code: # ...
 - PAT 1043 Is It a Binary Search Tree[二叉树][难]
		
1043 Is It a Binary Search Tree(25 分) A Binary Search Tree (BST) is recursively defined as a binary ...
 - PAT 1043 Is It a Binary Search Tree (25分) 由前序遍历得到二叉搜索树的后序遍历
		
题目 A Binary Search Tree (BST) is recursively defined as a binary tree which has the following proper ...
 - 1043 Is It a Binary Search Tree (25 分)
		
A Binary Search Tree (BST) is recursively defined as a binary tree which has the following propertie ...
 - 1043 Is It a Binary Search Tree (25分)(树的插入)
		
A Binary Search Tree (BST) is recursively defined as a binary tree which has the following propertie ...
 
随机推荐
- Python爬虫系列 - 初探:爬取旅游评论
			
Python爬虫目前是基于requests包,下面是该包的文档,查一些资料还是比较方便. http://docs.python-requests.org/en/master/ POST发送内容格式 爬 ...
 - PCB布线设计(1)
			
在PCB设计的时候,初学的时候对布线设计一无所知,那个时候老师布置 AT91SAM7X-开发板 作为学习例板 ,最终采用自动布线的结果如下 也并非全为自动布线,自动布线对于这种元器件稍多的很难全部 ...
 - java int 与 Integer之间的区别
			
int与integer的区别从大的方面来说就是基本数据类型与其包装类的区别: int 是基本类型,直接存数值,而integer是对象,用一个引用指向这个对象 1.Java 中的数据类型分为基本数据类型 ...
 - Git 创建并管理局域网仓库
			
Git 作为当前比较流行的代码管理工具,可以实现多人协作,不同版本代码管理. 本文内容基于Ubuntu. 0. 配置git信息 git config --global user.name XXX # ...
 - 20155301 2016-2017-2 《Java程序设计》第8周学习总结
			
20155301 2016-2017-2 <Java程序设计>第8周学习总结 教材学习内容总结 1.java.util.logging包提供了日志功能相关类与接口.使用日志的起点是logg ...
 - 20155306 实验三 敏捷开发与XP实践
			
20155306 实验三 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器 ...
 - 20155310 2016-2017-2 《Java程序设计》第十周学习总结
			
20155310 2016-2017-2 <Java程序设计>第十周学习总结 教材学习内容总结 网络编程 •网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就 ...
 - # 2017-2018-1 20155336《信息安全技术》实验二——Windows口令破解
			
2017-2018-1 20155336<信息安全技术>实验二——Windows口令破解 实验原理 口令破解方法 口令破解主要有两种方法:字典破解和暴力破解. 字典破解是指通过破解者对管理 ...
 - C#  webapi 路由规则和接收数据
			
1:新建的web api项目 默认的访问api方式: (get,post,delect,put) api+控制器 以Post为例子 post提交单个参数: 接收方法 post提交多个参数 接 ...
 - javaweb(二十一)——JavaWeb的两种开发模式
			
一.JSP+JavaBean开发模式 1.1.jsp+javabean开发模式架构 jsp+javabean开发模式的架构图如下图(图1-1)所示