数据结构--二叉树--顺序存储判断是否二叉搜索树(2022统考真题)

数据结构–二叉树–顺序存储判断是否二叉搜索树(2022统考真题)

题目描述:

在这里插入图片描述

思路

二叉搜索树(Binary Search Tree,简称BST)是一种具有以下性质的二叉树:

对于树中的每个节点 N,它的左子树(如果存在)中的所有节点的值都小于 N 节点的值。
对于树中的每个节点 N,它的右子树(如果存在)中的所有节点的值都大于 N 节点的值。
左子树和右子树也分别是二叉搜索树。
为了验证给定的数组是否构成一个有效的二叉搜索树,我们需要确保每个节点的值满足上述性质。特别是要保证在每个节点的值满足其左右子节点的值的约束。

从后向前的去验证,节点 N 与 它的父亲是否满足上述的条件。

代码

#include <iostream>
#define MAX_SIZE 100
using namespace std;
typedef struct {
	int sqBitNode[MAX_SIZE];
	int ElemNum;
} SqBiTree;
int lmax[MAX_SIZE], rmin[MAX_SIZE]; 
bool check(SqBiTree tree)
{
	for (int i = 0; i < tree.ElemNum; i++)
		lmax[i] = tree.sqBitNode[i], rmin[i] = tree.sqBitNode[i];
	for  (int i = tree.ElemNum - 1; i ;i--)
	{
		if (tree.sqBitNode[i] == -1) continue;
		int fa = (i - 1) / 2;
		if (i % 2 == 1 && tree.sqBitNode[fa] > lmax[i]) // fa 与 左孩子
			lmax[i] = tree.sqBitNode[fa];
		else if (i % 2 == 0 && tree.sqBitNode[fa] < rmin[i]) // fa 与 右孩子
			rmin[i] = tree.sqBitNode[fa];
		else 	return false;
	}
	return true;
}
int main()
{
	
	SqBiTree tree;
	cin >> tree.ElemNum;	
	for (int i = 0; i < tree.ElemNum; i++)
		cin >> tree.sqBitNode[i];
	cout << (check(tree) == 1 ? "tree" : "false") << '\n';
} 
/*
10 40 25 60 -1 30 -1 80 -1 -1 27

11 40 50 60 -1 30 -1 -1 -1 -1 -1 35
*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/652747.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

重学java 49 List接口

但逢良辰&#xff0c;顺颂时宜 —— 24.5.28 一、List接口 1.概述: 是collection接口的子接口 2.常见的实现类: ArrayList LinkedList Vector 二、List集合下的实现类 1.ArrayList集合的使用及源码分析 1.概述 ArrayList是List接口的实现类 2.特点 a.元素有序 —> 按照什么顺…

Oracle中rman的增量备份使用分享

继上次使用RMAN的全量备份和异机还原以后&#xff0c;开始研究一下增量备份和还原的方法。相比于全量RMAN的备份还原&#xff0c;增量的备份还原就相对简单。本实践教程直接上操作&#xff0c;还是回归到一个问题&#xff0c;就是关于两个数据库创建时候&#xff0c;必须保持or…

【职业教育培训机构小程序】教培机构“招生+教学”有效解决方案

教培机构“招生教学”有效解决方案在数字化转型的浪潮中&#xff0c;职业教育培训机构面临着提升教学效率、拓宽招生渠道、增强学员互动等多重挑战。小程序作为一种新兴的移动应用平台&#xff0c;为解决这些痛点提供了有效途径。 一、职业教育培训机构小程序的核心功能 &…

SpringBoot自动装配源码

自动装配&#xff1a; 实际上就是如何将Bean自动化装载到IOC容器中管理&#xff0c;Springboot 的自动装配时通过SPI 的方式来实现的 SPI&#xff1a;SpringBoot 定义的一套接口规范&#xff0c;这套规范规定&#xff1a;Springboot 在启动时会扫描外部引用 jar 包中的META-IN…

栈(从数据结构的三要素出发)

文章目录 逻辑结构物理结构顺序栈链栈共享栈 数据的操作顺序栈的基本操作链栈的基本操作共享栈的基本操作 数据结构的应用栈在括号匹配中的应用栈在表达式求值中的应用栈在递归调用中的应用 逻辑结构 栈是只允许在一端进行插入或删除操作的线性表。首先栈是一种线性表&#xf…

保留两位小数不四舍五入,10000.55变成10000.54的坑

正解 function moneyFormat(num){ let money num "";//隐式转换为字符串和toString()效果一样//没有小数补齐这个0if(money.indexOf(".")"-1"){moneymoney".00";}else{//有小数截取前二位小数moneymoney.substring(0,money.inde…

工业AI的崛起,中国自主创新的新机遇

我们都知道&#xff0c;互联网已经深刻地改变了我们的生活方式&#xff0c;催生了无数的新型商业模式和创新产业&#xff0c;推动了社会的经济变革。中国在互联网领域的发展取得了举世瞩目的成就&#xff0c;建成了全球规模最大、技术领先的5G网络&#xff0c;互联网应用的普及…

vue3 vite title 页面标题设置

效果图&#xff1a; 1. 安装 vite-plugin-html 插件 npm install vite-plugin-html -D2. 修改 vite.config.js import {defineConfig, loadEnv} from vite import { createHtmlPlugin } from "vite-plugin-html" import {resolve} from path import vue from vitej…

我说同事咋找工作命中率这么高,原来是学习了这些招式

最近有两个同事离职了&#xff0c;其中一个还是专科&#xff0c;他俩一个是前端开发&#xff0c;一个是python开发&#xff0c;两个人都接近35岁了。我们还劝告他们&#xff0c;不要离职&#xff0c;要骑驴找马。但了解后&#xff0c;他俩非常有信心的说&#xff1a;不怕&#…

振弦采集仪在岩土工程地质灾害监测中的可行性研究

振弦采集仪在岩土工程地质灾害监测中的可行性研究 引言&#xff1a; 岩土工程地质灾害是指在岩土体中由于自然力和人类活动等因素引起的&#xff0c;对人类生活、财产以及环境造成威胁的灾害。为了及时发现并准确监测地质灾害的发生和演化过程&#xff0c;振弦采集仪作为一种新…

web自动化-下拉框操作/键鼠操作/文件上传

在我们做UI自动化测试的时候&#xff0c;会有一些元素需要特殊操作&#xff0c;比如下拉框操作/键鼠操作/文件上传。 下拉框操作 在我们很多页面里有下拉框的选择&#xff0c;这种元素怎么定位呢&#xff1f;下拉框分为两种类型&#xff1a;我们分别针对这两种元素进行定位和…

6-4 先序输出度为2的结点

作者 DS课程组 单位 临沂大学 本题要求实现一个函数&#xff0c;按照先序遍历的顺序输出给定二叉树中度为2的结点。 函数接口定义&#xff1a; void PreorderPrintNodes( BiTree T);T是二叉树树根指针&#xff0c;PreorderPrintNodes按照先序遍历的顺序输出给定二叉树T中度为…

随笔(二)——项目代码优化

文章目录 前言一、传入的props的默认值定义为空数组1.问题&#xff08;提示对象的类型为unknwn&#xff09;2.优化 二、document 上不存在xxx属性1.问题2.做了一个兼容浏览器的关闭全屏方法3. 解决方法 &#xff08;使用declare globa设置全局变量类型&#xff09;&#xff08;…

ssm球场计费管理系统-计算机毕业设计源码77275

摘 要 大数据时代下&#xff0c;数据呈爆炸式地增长。为了迎合信息化时代的潮流和信息化安全的要求&#xff0c;利用互联网服务于其他行业&#xff0c;促进生产&#xff0c;已经是成为一种势不可挡的趋势。在球馆计费管理的要求下&#xff0c;开发一款整体式结构的球场计费管理…

配置阿里yum源

配置阿里yum源&#xff08;这个很重要&#xff09;&#xff1a;https://developer.aliyun.com/article/1480470 1.备份系统自带yum源配置文件 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup2.下载ailiyun的yum源配置文件 2.1 CentOS7 wge…

专业软件测试机构CMA、CNAS资质与测试报告介绍

软件测试机构 一、专业软件测试机构CMA和CNAS的资质介绍如下&#xff1a; 1.CMA&#xff08;China Inspection Body and Laboratory Mandatory Approval&#xff09;是中国计量认证的缩写&#xff0c;是由中国计量认证机构对软件测试实验室在测试技术能力、测试设备、质量保证…

【Java面试】四、MySQL篇(上)

文章目录 1、定位慢查询2、慢查询的原因分析3、索引3.1 数据结构选用&#xff1a;二叉树 & 红黑树3.2 数据结构选用&#xff1a;B树 4、聚簇索引、非聚簇索引、回表查询4.1 聚簇索引、非聚簇索引4.2 回表查询 5、覆盖索引、超大分页优化5.1 覆盖索引5.2 超大分页处理 6、索…

Stable Diffusion AI绘画:从提示词到模型出图的全景指南

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】&#x1f91f; 一站式轻松构建小程序、Web网站、移动应用&#xff1a;&#x1f449;注册地址&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交…

Python Anaconda环境复制

虚拟环境复制 conda-pack 第一种方式 conda打包 在打包之前如果没有conda-pack包的话&#xff0c;需要安装pip install conda-pack打包 conda pack -n py36 -o py366.tar.gz -o就是给导出得到的压缩包就在当前目录下 传输到另外一台服务器上 有两台linux服务器&#xff0c…

30V MOS管 60VMOS管 100VMOS管 150VMOS管推荐

MOS管&#xff0c;即金属氧化物半导体场效应管&#xff0c;其工作原理是&#xff1a;在P型半导体与N型半导体之间形成PN结&#xff0c;当加在MOS管栅极上的电压改变时&#xff0c;PN结之间的沟道内载流子的数量会随之改变&#xff0c;沟道电阻也会发生改变&#xff0c;进而改变…