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

F (1164) : B DS二叉排序树_有效的二叉排序树

 

Description

给你一个二叉树,判断其是否是一个有效的二叉排序树。

有效的二叉排序树定义如下:

1. 结点的左子树只包含小于当前结点的数。

2. 结点的右子树只包含大于当前结点的数。

3. 所有左子树和右子树自身必须也是二叉排序树。

Input

第一行输入t,表示有t个二叉树。

第二行起,每一行首先输入n,接着输入n个整数,代表二叉树。

以此类推共输入t个二叉树。

数组形式的二叉树表示方法与题目:DS二叉树_伪层序遍历构建二叉树 相同,输入-1表示空结点。

Output

每一行输出当前二叉树是否为二叉排序树,若是,则输出true,否则输出false。

共输出t行。

Input

4
3 2 1 3
7 5 1 4 -1 -1 3 6
7 2 1 4 -1 -1 3 6
8 9 8 -1 7 -1 6 -1 5

Output

true
false
true
true

代码如下,难点在于两个,一个是非递归层次遍历建树,第二个是判断为有效的二叉排序树。

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <limits.h> // 使用 INT_MIN 来初始化 pre#define MAXN 1005typedef struct Node
{int data;struct Node *Lchild;struct Node *Rchild;
} Node;Node *Build_Level(int *a, int num)
{Node *ROOT = NULL; // 待会要把根节点返回Node *queue[MAXN]; // 队列int front = 0, rear = 0;int k = 0;int ch;ch = a[k];k++;if (ch != -1){Node *root = (Node *)malloc(sizeof(Node));root->data = ch;root->Lchild = NULL;root->Rchild = NULL;ROOT = root;queue[rear++] = ROOT;}while (front != rear && k < num){Node *s = queue[front];front++;ch = a[k];if (ch != -1 && k < num){Node *news = (Node *)malloc(sizeof(Node));news->data = ch;news->Lchild = NULL;news->Rchild = NULL;s->Lchild = news;queue[rear++] = news;}k++;ch = a[k];if (ch != -1 && k < num){Node *news = (Node *)malloc(sizeof(Node));news->data = ch;news->Lchild = NULL;news->Rchild = NULL;s->Rchild = news;queue[rear++] = news;}k++;}return ROOT;
}bool JudgeBst(Node *T, int *pre)
{ // 判断是否为 BSTif (T == NULL){return true;}if (!JudgeBst(T->Lchild, pre)){return false;}if (T->data < *pre){return false;}*pre = T->data;return JudgeBst(T->Rchild, pre);
}int main()
{int t;int sum;scanf("%d", &t);while (t--){scanf("%d", &sum);int *array = (int *)malloc(sizeof(int) * sum);for (int i = 0; i < sum; i++){scanf("%d", &array[i]);}Node *p = Build_Level(array, sum); // p 为根节点int pre = INT_MIN;                 // 初始化 pre 为负无穷printf("%s\n", (JudgeBst(p, &pre) ? "true" : "false"));free(array);}return 0;
}

相关文章:

F (1164) : B DS二叉排序树_有效的二叉排序树

Description 给你一个二叉树&#xff0c;判断其是否是一个有效的二叉排序树。 有效的二叉排序树定义如下&#xff1a; 1. 结点的左子树只包含小于当前结点的数。 2. 结点的右子树只包含大于当前结点的数。 3. 所有左子树和右子树自身必须也是二叉排序树。 Input 第一行输…...

结合el-upload修改支持上传图片、视频并预览

结合element plus的el-upload标签&#xff0c;实现上传图片和视频&#xff0c;并支持在线预览和放大 1、html部分 <el-form-item label"活动照片、视频"><el-uploadv-model:file-list"state.photoList":action"state.uploadUrl"accept…...

1.SQL - 概述

1. SQL语句分类 • 数据定义语言&#xff1a;简称DDL(Data Definition Language)&#xff0c;用来定义数据库对象&#xff1a;数据库&#xff0c;表&#xff0c;列等。关键字&#xff1a;create&#xff0c;alter&#xff0c;drop等 • 数据操作语言&#xff1a;简称DML(Data …...

GaussDB数据库表创建行访问控制策略

目录 一、前言 二、GaussDB中的行访问控制 1、CREATE ROW LEVEL SECURITY POLICY语法 2、ALTER ROW LEVEL SECURITY POLICY语法 3、ROW LEVEL SECURITY策略与适配SQL语法关系 三、GaussDB中的行访问控制策略示例 1、实现GaussDB行访问控制的一般步骤 2、行访问控制策略…...

提升设备巡检效率的关键:易点易动设备管理系统的应用

随着互联网技术的发展,智慧设备管理已成为各行各业提升运营效率的重要选择。相比传统的手动巡检方式,采用设备管理系统可以实现物联网技术给企业带来更高效的运营方式。其中,易点易动作为一款成熟的设备管理系统,其广泛应用于提升设备巡检效率这一领域发挥了很好的作用。 采用易…...

【C++】STL 容器 - list 双向链表容器 ① ( 容器特点 | 容器操作时间复杂度 | 构造函数 )

文章目录 一、 list 双向链表容器简介1、容器特点2、容器操作时间复杂度3、遍历访问5、头文件 二、 list 双向链表容器 构造函数1、默认无参构造函数2、创建包含 n 个相同元素的 list 双向链表3、使用初始化列表构造 list 双向链表4、使用另外一个 list 容器 构造 list 双向链表…...

[C/C++]数据结构 希尔排序

&#x1f966;前言: 希尔排序也称 “缩小增量排序”&#xff0c;它也是一种插入类排序的方法,在学习希尔排序之前我们首先了解一下直接插入排序. 一: &#x1f6a9;直接插入排序 1.1 &#x1f31f;排序思路 直接插入排序的基本原理是将一条记录插入到已排好的有序表中&#x…...

SQL进阶:子查询

一般情况下,我们都是直接对表进行查询,但有时候,想要的数据可能通过一次select 获取不到,需要嵌套select,这样就形成了子查询。 子查询可以位于查询语句的任意位置,主要的注意点在于用于不同的位置,和不同的关键字一起使用时,需要注意返回的列的数量和行的数量。 位于…...

5、IDEA集成Git

IDEA集成Git 1. 配置Git忽略文件2. 定位Git程序3. 初始化本地库、添加暂存区、提交到本地库4. 切换版本5. 创建分支和切换分支6. 合并分支7. 解决冲突 1. 配置Git忽略文件 问题1&#xff1a;为什么要忽略他们&#xff1f; 与项目的实际功能无关&#xff0c;不参与服务器上部署…...

oracle数据库sqlplus登录卡顿

问题描述 新安装了一套oracle 11.2.0.1 版本的数据库服务器&#xff0c;出现了在服务器本地通过sqlplus / as sysdba登录的时候很快&#xff0c;但是通过监听登录的时候就非常的慢&#xff0c;卡顿&#xff0c;大概需要1分钟多的时间才能登进数据库。 之前安装了好几套oracle …...

【C#】Visual Studio 2022 远程调试配置教程

在某些特殊的情况下&#xff0c;开发机和调试机可能不是同一台设备&#xff0c;此时就需要远程调试了。 开发机配置 首先需要确保两台机器在同一局域网下。 创建共享文件夹 随便找个地方新建一个文件夹&#xff0c;用来放编译结果。例如我这里是 D:\DebuggingWorkspace\。 …...

LSTM的记忆能力实验

长短期记忆网络&#xff08;Long Short-Term Memory Network&#xff0c;LSTM&#xff09;是一种可以有效缓解长程依赖问题的循环神经网络&#xff0e;LSTM 的特点是引入了一个新的内部状态&#xff08;Internal State) 和门控机制&#xff08;Gating Mechanism&#xff09;&am…...

Unity之ShaderGraph如何实现瓶装水效果

前言 有一个场景在做效果时,有一个水瓶放到桌子上的设定,但是模型只做了个水瓶,里面是空的,所以我就想办法,如何做出来瓶中装睡的效果,最好是能跟随瓶子有液体流动的效果。 如下图所示: 水面实现 水面效果 液体颜色设置 因为液体有边缘颜色和内里面颜色,所以要分开…...

【python与机器学习3】感知机和门电路:与门,或门,非门等

目录 1 电子和程序里的与门&#xff0c;非门&#xff0c;或门&#xff0c;与非门 &#xff0c;或非门&#xff0c;异或门 1.1 基础电路 1.2 所有的电路情况 1.3 电路的符号 1.4 各种电路对应的实际电路图 2 各种具体的电路 2.1 与门&#xff08;and gate&#xff09; 2…...

关键字:extends关键字

在 Java 中&#xff0c;extends 是一个关键字&#xff0c;用于表示继承关系。当一个类使用 extends 关键字时&#xff0c;它表示该类是一个子类&#xff0c;并且继承了父类的属性和方法。 以下是 extends 关键字的解析&#xff1a; 语法&#xff1a; 描述&#xff1a; ChildC…...

KEPServerEX 6 之【外篇-1】PTC-ThingWorx服务端软件安装 Tomcat10本地安装

本文目标: 安装 Java 和 Apache Tomcat ,为ThingWorx安装做基础。 ----------------------------------------------------------------------- 安装重点 --------------------------------------------------------------------- 1. 安装 Java 11 / JDK 11 添加系…...

(Mac上)使用Python进行matplotlib 画图时,中文显示不出来

【问题描述】 ①报错确缺失字体&#xff1a; ②使用matplotlib画图&#xff0c;中文字体显示不出来 【问题思考】 在网上搜了好多&#xff0c;关于使用python进行matplotlib画图字体显示不出来的&#xff0c;但是我试用了下&#xff0c;对我来说都没有。有些仅使用于windows系…...

万能刷题小程序源码系统:功能强大+试题管理+题库分类+用户列表 附带完整的搭建教程

随着互联网技术的不断进步&#xff0c;线上学习已成为越来越多人的选择。刷题作为提高学习效果的重要方式&#xff0c;一直受到广大学生的喜爱。然而&#xff0c;市面上的刷题软件虽然繁多&#xff0c;但功能各异&#xff0c;质量参差不齐&#xff0c;使得很多用户在选择时感到…...

5.2 显示窗口的内容(二)

三,显示器几何形状管理 只有显示管理器被允许更改显示器的几何形状。窗口管理器也是显示管理器。 3.1 当显示器显示其自身内容时 当显示器显示其自身内容时,适用以下属性: 显示属性描述SCREEN_PROPERTY_PROTECTION_ENABLE表示显示目标窗口是否需要内容保护。只要显示器上…...

SpringCloud 整合 Canal+RabbitMQ+Redis 实现数据监听

1Canal介绍 Canal 指的是阿里巴巴开源的数据同步工具&#xff0c;用于数据库的实时增量数据订阅和消费。它可以针对 MySQL、MariaDB、Percona、阿里云RDS、Gtid模式下的异构数据同步等情况进行实时增量数据同步。 当前的 canal 支持源端 MySQL 版本包括 5.1.x , 5.5.x , 5.6.…...

Ostrakon-VL-8B辅助作业批改实战:识别手写公式与图表

Ostrakon-VL-8B辅助作业批改实战&#xff1a;识别手写公式与图表 每次批改理科作业&#xff0c;是不是都感觉眼睛快看花了&#xff1f;特别是面对几十份甚至上百份的手写作业&#xff0c;那些密密麻麻的公式、歪歪扭扭的电路图&#xff0c;还有各式各样的化学符号&#xff0c;…...

Clipboard命令行参数完整指南:掌握所有可用选项的终极手册

Clipboard命令行参数完整指南&#xff1a;掌握所有可用选项的终极手册 【免费下载链接】Clipboard &#x1f60e;&#x1f3d6;️&#x1f42c; Your new, &#x1d667;&#x1d65e;&#x1d659;&#x1d664;&#x1d663;&#x1d660;&#x1d66a;&#x1d661;&#x1…...

玩转openrgb

缘由我的asus b760m有rgb&#xff0c;但是华硕Armoury Crate 确实比较臃肿&#xff0c;经常啥也没干它占用3-5%。而开源界有个openrgb&#xff0c;虽然看似简陋但是它小啊。于是采用python脚本openrgb来玩转它。本方案应该也适用于其他rgb主板。准备工作1、下载openrgb&#xf…...

SWIFT报文格式规范:从字符约束到金融交易安全的深度解析

1. SWIFT报文格式规范的核心价值 第一次接触SWIFT报文时&#xff0c;我被那些看似简单的字母代号震撼到了——谁能想到&#xff0c;像"2!n"这样简单的符号组合&#xff0c;竟然承载着全球金融系统的运转规则&#xff1f;在跨境汇款中输错一个字符可能导致资金滞留数周…...

不露脸也能当主播?一文了解VTuber

不露脸也能当主播&#xff1f;一文了解VTuber很多人提到 VTuber&#xff0c;脑子里就是“二次元纸片人”在直播间卖萌。 但其实&#xff0c;你每天换的微信头像、用过的苹果拟我表情&#xff0c;短视频平台的3D头套全都是它的“远房亲戚”。 今天我们就把这层科技外衣扒开&…...

2025最权威的十大AI学术神器推荐榜单

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 于人工智能生成内容也就是AIGC愈发普及的当前情形下&#xff0c;把它的机械痕迹以及同质化特…...

如何写 Skill

核心概念 Skill 是一个自包含的模块&#xff0c;用来给 Claude/Cascade 注入特定领域的知识、工作流和工具。本质上就是一个"新手入职指南"&#xff0c;让通用 AI 变成某个领域的专家。 目录结构 skill-name/ ├── SKILL.md # 必须&#xff0c;核心文件 └…...

OpenClaw性能优化:千问3.5-9B模型加速30%的秘诀

OpenClaw性能优化&#xff1a;千问3.5-9B模型加速30%的秘诀 1. 为什么需要优化OpenClaw性能 第一次用OpenClaw执行自动化任务时&#xff0c;我遇到了一个尴尬的问题——点击"整理桌面文件"指令后&#xff0c;系统整整思考了15秒才开始移动第一个文件。这种延迟在简…...

电池包结构仿真与力学分析指南

电池包结构仿真&#xff0c;电池包力学仿真&#xff0c;电池包CAE分析&#xff0c;新能源电池电池CAE分析&#xff0c;结构仿真&#xff0c;力学分析附带相对应的模型文件,指导书&#xff0c;可直接自己跟着做分析另外附赠完整电池包模型一、概述随着新能源汽车的飞速发展&…...

DFRobot URM07超声波传感器UART通信与温度补偿详解

1. DFRobot URM07超声波测距传感器技术深度解析1.1 产品定位与工程价值DFRobot URM07&#xff08;SKU: SEN0153&#xff09;是一款面向嵌入式系统设计的工业级超声波距离传感器模块&#xff0c;其核心价值在于将高精度测距、环境温度补偿、超低功耗与UART标准化接口四者深度融合…...