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的更多相关文章

  1. 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 ...

  2. 【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 ...

  3. 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 ...

  4. 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 ...

  5. 【PAT甲级】1099 Build A Binary Search Tree (30 分)

    题意: 输入一个正整数N(<=100),接着输入N行每行包括0~N-1结点的左右子结点,接着输入一行N个数表示数的结点值.输出这颗二叉排序树的层次遍历. AAAAAccepted code: # ...

  6. 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 ...

  7. 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 ...

  8. 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 ...

  9. 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 ...

随机推荐

  1. golang基础--method方法

    Go没有类似python语言中类class的概念,但依旧有method 类型方法定义格式如下 func (a mytype) method_name(x type)(y type){ return y ...

  2. leetcode-744-Find Smallest Letter Greater Than Target(改进的二分查找)

    题目描述: Given a list of sorted characters letters containing only lowercase letters, and given a targe ...

  3. MFC中两个对话框之间数据传递

    以下是在网上参考的一篇文章,网址:https://blog.csdn.net/foreverhuylee/article/details/21707197 这里有两种情况, 第一种情况是: (在一个基 ...

  4. Linux入门第二天——基本命令入门(下)

    一.帮助命令 1.帮助命令:man (是manual手册的缩写,男人无所不能,/笑哭) 更多man用法以及man page的用法,参见:http://www.linuxidc.com/Linux/20 ...

  5. 20155220 2016-2017-2《Java程序设计》课程总结

    20155220 2016-2017-2<Java程序设计>课程总结 每周作业链接汇总 预备作业1:师生关系 预备作业2:优秀技能经验 预备作业3:虚拟机linux初接触 第一周学习总结: ...

  6. 20155302 2016-2017-2 《Java程序设计》 第1周学习总结

    20155302 2016-2017-2 <Java程序设计> 第1周学习总结 教材学习内容总结 浏览全书提出问题 chapter1:怎么保证现在系统在用最高版本的JRE呢?在哪里查看及升 ...

  7. 20155336虎光元实验四 Android开发基础

    20155336虎光元实验四 Android开发基础 实验内容 1:完成Hello World, 要求修改res目录中的内容,Hello World后要显示自己的学号 2:创建 ThirdActivi ...

  8. 详解UML图之类图

    产品经理的必备技能之一是画UML图,本文就告诉你怎么画标准的类图吧.本文结合网络资料和个人心得所成,不当之处,请多指教. 1.为什么需要类图?类图的作用 我们做项目的需求分析,最开始往往得到的是一堆文 ...

  9. Django的简介

    一.MTV模型 Django的MTV模式: Model(模型):和数据库相关的.负责业务对象与数据库的对象(ORM) Template(,模板):放所有的HTML文件 模板语法:目的是将变量(数据库内 ...

  10. robotframework 脚本编写规范

    测试集.脚本 测试脚本的名字不要超过20个字符,文件类型应该为txt  名字必需易读且有意义(看名知意)  记住测试集的名字是自动根据文件.目录的名字创建的.后缀名会被截去,下划线会转换为空格,如果名 ...