当前位置: 首页 > article >正文

PAT甲级1043、 Is It a Binary Search Tree

题目

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

思路

我没有想到什么特别好的思路,只能一边建树一边判断

如果能建出来一棵,那么就是可行的,建不出来的话就说明不行

建树的方法就是找到根(第一个位置),然后在树的其他部分找到第一个大于或小于根的元素,这里BST的话就找大于的,因为BST左子树全小于根,镜像的话就是小于的,注意,等于的元素是允许的,然后递归下去就可以了

要特别注意两种情况:

1、叶子节点没有孩子,要注意怎么判断出来

2、如果一棵树都只有左子树

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Node
{int val;Node* left;Node* right;
};
int tree[1001]={0};
bool BST = false,BOM = true;
Node* createTree(int l,int r,int min,int max)
{// cout<<"enter a node "<<l<<" "<<tree[l]<<endl;// cout<<l<<" "<<r<<" "<<min<<" "<<max<<endl;if(l>r || !BOM)return nullptr;if(tree[l] < min || tree[l] > max){BOM = false;return nullptr;}Node* root = new Node;root->val = tree[l];//这里对叶子节点的特判可有可无,不写也无所谓if(l==r){root->left = nullptr;root->right = nullptr;return root;}int start=l;for(;start<=r;start++){if(BST){if(tree[start] > tree[l])break;}else{if(tree[start] < tree[l])break;}}int lmi=min,lma=tree[l],rmi=tree[l],rma=max;if(!BST){lmi = tree[l];lma = max;rmi = min;rma = tree[l];}// cout<<start<<" "<<r<<endl;// cout<<lmi<<" "<<lma<<" "<<rmi<<" "<<rma<<endl;root->left = createTree(l+1, start-1,lmi,lma);root->right = createTree(start, r,rmi,rma);return root;
}
vector<int> post;
void postOrder(Node* root)
{if(root == nullptr)return ;postOrder(root->left);postOrder(root->right);post.push_back(root->val);
}
int main()
{int n;cin>>n;for(int i=0;i<n;i++){cin>>tree[i];}if(n > 1)for(int i=1;i<n;i++){// cout<<"i "<<tree[i]<<endl;if(tree[i] > tree[0]){BST = false;break;}if(tree[i] < tree[0]){BST = true;break;}}// cout<<BST<<endl;Node* root = createTree(0,n-1,-1, 10000);if(BOM){postOrder(root);cout<<"YES"<<endl<<post[0];for(int i=1;i<post.size();i++)cout<<" "<<post[i];cout<<endl;}elsecout<<"NO"<<endl;
}

相关文章:

PAT甲级1043、 Is It a Binary Search Tree

题目 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 nodes key.The right subtree of a node contains only nodes with keys greater…...

【Python】元组

个人主页&#xff1a;GUIQU. 归属专栏&#xff1a;Python 文章目录 1. 元组的本质与基础概念1.1 不可变序列的意义1.2 元组与数学概念的联系 2. 元组的创建方式详解2.1 标准创建形式2.2 单元素元组的特殊处理2.3 使用 tuple() 函数进行转换 3. 元组的基本操作深入剖析3.1 索引操…...

[RabbitMQ] RabbitMQ常见面试题

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…...

旋转位置编码(RoPE)讲解和代码实现

旋转位置编码(Rotary Position Embedding:RoPE)讲解和代码实现 1. 什么是位置编码? 在 Transformer 模型中,位置编码的作用是为模型提供序列中每个 token 的位置信息。因为 Transformer 本身没有像 RNN 那样的顺序结构,所以需要通过位置编码来告诉模型 token 的顺序。 …...

小红书自动化:如何利用Make批量生成爆款笔记

小红书自动化&#xff1a;如何利用Make制作个人自媒体中心&#xff0c;批量生成爆款笔记 引言 在如今信息爆炸的时代&#xff0c;如何高效地获取和分享优质内容&#xff0c;成为了每位自媒体工作者必须面对的挑战。你是否想过&#xff0c;如果能够将这项繁复的工作实现自动化…...

计算机组成原理 | (四)存储器

&#x1f32e;&#x1f32e;&#x1f32e;宝子们好呀&#xff0c;今天继续更新我的学习笔记&#xff0c;教我计算机组成原理的老师是SDUCS的zrh老师&#xff0c;感谢z老师的教导&#xff0c;接下来我就放上我的手写笔记&#xff0c;供大家学习参考&#xff0c;适合大家预习和复…...

Maven 版本管理与 SNAPSHOT 详解

1. Maven 版本管理概述 在 Maven 项目中&#xff0c;版本号&#xff08;Version&#xff09;是用于区分不同软件版本的重要标识。Maven 提供了一套标准的版本管理机制&#xff0c;包括&#xff1a; 正式版本&#xff08;Release Version&#xff09;快照版本&#xff08;SNAP…...

基于 GEE 利用 SDWI 指数进行逐月水域面积提取

目录 1 SDWI指数 2 完整代码 3 运行结果 微波遥感具有全天候、全天时工作能力&#xff0c;能穿透云层&#xff0c;不受气象条件和光照水平影响&#xff0c;因此近年来利用微波遥感提取水体信息也备受关注。本文分享使用 Sentinel-1遥感影像通过SDWI指数来进行逐月水域面积计…...

XMind 下载与使用教程:附百度网盘地址

一、引言 在信息爆炸的时代&#xff0c;如何高效地整理和管理知识成为了许多人面临的挑战。XMind 作为一款功能强大的思维导图软件&#xff0c;能够帮助我们清晰地梳理思路、整合信息&#xff0c;从而提升学习和工作效率。本文将详细介绍 XMind 的下载方法 二、XMind 的下载与…...

[EAI-034] 通过在线强化学习改进VLA模型

Paper Card 论文标题&#xff1a;Improving Vision-Language-Action Model with Online Reinforcement Learning 论文作者&#xff1a;Yanjiang Guo, Jianke Zhang, Xiaoyu Chen, Xiang Ji, Yen-Jen Wang, Yucheng Hu, Jianyu Chen 论文链接&#xff1a;https://arxiv.org/abs/…...

Python 和 JavaScript 中 Yield 的区别

Python 和 JavaScript 中 Yield 的区别 目录 Python 和 JavaScript 中 Yield 的区别PythonyieldJavaScriptyieldPythonyield fromJavaScriptyield* 推荐超级课程&#xff1a; Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战 Pythonyield 在 Python 中…...

每日学习 设计模式 五种不同的单例模式

狮子大佬原文 https://blog.csdn.net/weixin_40461281/article/details/135050977 第一种 饿汉式 为什么叫饿汉,指的是"饿" 也就是说对象实例在程序启动时就已经被创建好,不管你是否需要,它都会在类加载时立即实例化,也就是说 实例化是在类加载时候完成的,早早的吃…...

【基于SprintBoot+Mybatis+Mysql】电脑商城项目之上传头像和新增收货地址

&#x1f9f8;安清h&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;【Spring篇】【计算机网络】【Mybatis篇】 &#x1f6a6;作者简介&#xff1a;一个有趣爱睡觉的intp&#xff0c;期待和更多人分享自己所学知识的真诚大学生。 目录 &#x1f680;1.上传头像 -持久…...

SSM仓库物品管理系统 附带详细运行指导视频

文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码1.用户登录代码&#xff1a;2.保存物品信息代码&#xff1a;3.删除仓库信息代码&#xff1a; 一、项目演示 项目演示地址&#xff1a; 视频地址 二、项目介绍 项目描述&#xff1a;这是一个基于SSM框架开发的仓库…...

C++11新特性之unique_ptr智能指针

本节继续介绍智能指针&#xff0c;不了解的读者可以先阅读——C11新特性之shared_ptr智能指针-CSDN博客 1.介绍 unique_ptr是C11标准提供的另一种智能指针。与shared_ptr不同的是&#xff0c;unique_ptr指针指向的堆内存无法同其他unique_ptr共享&#xff0c;也就是每一片堆内…...

模型压缩 --学习记录2

模型压缩 --学习记录2 如何找到更好的权衡方式(模型量化)方法一:寻找更好的 range方法二:寻找更好的 X-fp32(浮点数)方法三:寻找更好的 scale 和 zp方法四:寻找更好的 roundPTQ 后训练量化(离线量化)QAT 量化感知训练(在线量化)量化为什么会带来加速?三、模型稀疏技…...

车载诊断工具技巧 --- CAPL Debug 功能使用介绍

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身…...

Sinusoidal(正弦曲线)位置编码公式详细推导过程

Sinusoidal(正弦曲线)位置编码公式推导 参考链接 Transformer升级之路&#xff1a;1、Sinusoidal位置编码追根溯源 1. 前置数学的基本概念 1.1 内积 定义&#xff1a; 内积是两个向量之间的一种运算&#xff0c;其结果为一个标量。公式&#xff1a; 对于向量 a [ a 1 , …...

<论文>DeepSeek-R1:通过强化学习激励大语言模型的推理能力(深度思考)

一、摘要 本文跟大家来一起阅读DeepSeek团队发表于2025年1月的一篇论文《DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning | Papers With Code》&#xff0c;新鲜的DeepSeek-R1推理模型&#xff0c;作者规模属实庞大。如果你正在使用Deep…...

萌新学 Python 之字符串及字符串相关函数

字符串&#xff1a;单引号、双引号、三个单引号、三个双引号 字符串属于不可变的数据类型&#xff0c;一旦被定义&#xff0c;内存地址不变 name 张三 # 字符串赋值给name后&#xff0c;内存地址存储张三&#xff0c;地址不变 username 张三 # 张三去内存中找…...

如何改善RK3588基于MPP的H265传输码率

1、降低帧率 由原来的30fps修改为25fps&#xff0c;具体修改如下&#xff1a; H265Level level H264Level::L_1080P_30FPS;修改为 H265Level level H264Level::L_1080P_25FPS; 同时修改在MppInit函数中修改如下内容&#xff1a; uint32_t fps 30;修改为uint32_t fps 2…...

系统思考—自我超越

“人们往往认为是个人的能力限制了他们&#xff0c;但事实上&#xff0c;是组织的结构和惯性思维限制了他们的潜力。”—彼得圣吉 最近和一家行业隐形冠军交流&#xff0c;他们已经是领域第一&#xff0c;老板却依然要求&#xff1a;核心团队都要自我超越&#xff0c;攻坚克难…...

redis高级数据结构Stream

文章目录 背景stream概述消息 ID消息内容常见操作独立消费创建消费组消费 Stream弊端Stream 消息太多怎么办?消息如果忘记 ACK 会怎样?PEL 如何避免消息丢失?分区 Partition Stream 的高可用总结 背景 为了解决list作为消息队列是无法支持消息多播问题&#xff0c;Redis5.0…...

day44 QT核心机制

头文件&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QLabel> //标签类头文件 #include<QPushButton> //按钮类头文件 #include<QLineEdit> //行编辑器类头文件QT_BEGIN_NAMESPACE namespace Ui { class Widget; } …...

打家劫舍3

今天和打家讲一下打家劫舍3 题目&#xff1a; 题目链接&#xff1a;337. 打家劫舍 III - 力扣&#xff08;LeetCode&#xff09; 小偷又发现了一个新的可行窃的地区。这个地区只有一个入口&#xff0c;我们称之为root。 除了 root 之外&#xff0c;每栋房子有且只有一个“父“…...

webpack配置之---上下文

context context 是 Webpack 配置中的一个重要属性&#xff0c;它主要用于确定模块解析时的基础目录。可以理解为是 Webpack 在解析模块时&#xff0c;基于哪个目录作为根路径来查找模块。context 的默认值是 process.cwd()&#xff0c;即当前执行 Webpack 命令时的工作目录。…...

Spring Boot: 使用 @Transactional 和 TransactionSynchronization 在事务提交后发送消息到 MQ

Spring Boot: 使用 Transactional 和 TransactionSynchronization 在事务提交后发送消息到 MQ 在微服务架构中&#xff0c;确保消息的可靠性和一致性非常重要&#xff0c;尤其是在涉及到分布式事务的场景中。本文将演示如何使用 Spring Boot 的事务机制和 TransactionSynchron…...

2024中国行政区划多边形矢量数据(含有十段线)仅供学习

中国标准行政区划数据GS&#xff08;2024&#xff09;0650号&#xff0c;包括&#xff1a; 分省市县 省内分市 省内分县 南海十段线与岛屿区域 全国市级行政区划 通过网盘分享的文件&#xff1a;中国标准行政区划数据GS&#xff08;2024&#xff09;0650号.rar等4个文件 链接…...

给底部导航栏添加图形

文章目录 1. 概念介绍2. 修改方法2.1 修改属性2.2 包裹容器2.3 剪裁形状3. 代码与效果3.1 示例代码3.2 运行效果4. 内容总结我们在上一章回中介绍了"NavigationBar组件"相关的内容,本章回中将介绍如何修改NavigationBar组件的形状.闲话休提,让我们一起Talk Flutter…...

DeepSeek-R1 智能知识库系统使用指南

DeepSeek-R1 智能知识库系统使用指南 第一部分 基础操作教程 1.1 系统初始化 // 示例命令 > /initialize --configenterprise_knowledge --languagezh-CN [系统响应] 已加载企业知识图谱&#xff08;含12万实体/35万关系&#xff09;NLP引擎切换为中文混合语义模型1.2 基…...