判断是否为二叉排序树(二叉搜索树,二叉查找树)

news2024/10/7 21:34:05

1.判断给定的二叉树是否为二叉排序树,如果是返回1,不是返回0。

思想:

二叉树是左子树<根<右子树。中序遍历是递增有序,可以通过比较当前结点与前驱关系来进行判断。

代码:

//pre为全局变量,保存当前结点中序前驱的值,初始为负无穷 
KeyType pre = -32767;

int isBST(BiTree T){
	int isLBST,isRBST;
	
	if(T==NULL){
		return 1;//空树为二叉排序树 
	} else{
		isLBST = isBST(T->lchild);//判断左子树是否为平衡二叉树
		if(isLBST==0||pre>=T->data){//这种情况不是二叉排序树 
			return 0;
		} 
		pre=T->data;//更新前驱结点 
		isRBST=isBST(T->rchild);//判断右子树是否为二叉排序树 
		return isRBST;//这课树是否为二叉排序树可以由右子树来判断 
	} 
} 

2.从大到小输出二叉排序树中所有值不小于k的值。

思想:利用二叉排序树中序递归递增有序的特性,从右子树开始处理右子树,然后处理自己,最后处理左子树。

代码:

void GetNodek(BiTree T,TElemType k){
	if(T==NULL) retuen;
	if(T->rchild!=NULL) GetNodek(T->rchild,k);
	if(T->data>=k) printf("%d",T->data);
	if(T-lchild!=NULL) GetNodek(T->lchild,k);
}

3.已知非空二叉树T的结点值均为正数,采用顺序存储方式保存,数据结构定义如下:

typedef struct {                    // MAX_SIZE为已定义常量
    Elemtype SqBiTNode[MAX_SIZE];   // 保存二叉树结点值的数组
    int ElemNum;                    // 实际占用的数组元素个数
}SqBiTree;

T中不存在的结点在数组SqBiTNode中用-1表示。例如,对于下图所示的两棵非空二叉树T1和T2:

请设计一个尽可能高效的算法,判定一棵采用这种方式存储的二叉树是否为二叉搜索树,若是,则返回true,否则,返回false,要求:

⑴ 给出算法的基本设计思想。

⑵ 根据设计思想,采用C或C++语言描述算法,关键之处给出注释。

思想:二叉搜索树的特点是中序遍历是有序的。除去第一个结点,比较当前结点与前驱之间的关系,如果所有结点都满足,则是二叉搜索树。当前结点的下标为i,则左孩子为2*1+1,右孩子为2*i+2。

代码:

//pre为全局变量,保存当前结点中序前驱的值,初始为负无穷 
ElemType pre = -32767;

bool BST(SqBiTree T ,int i){
	//空树是二叉搜索树
	if(i>=T.ElemNum || T.SqBiTree[i]==-1){
		return true;
	} 
	bool LBST=BST(T,i*2+1);//判断左子树
	if(LBST==NULL || pre>=T.SqBiTree[i]) {//左子树不是二叉搜索树
		return false;
	}
	pre=T.SqBiTree[i];
	bool RBST=BST(T,i*2+2);//判断右子树
	return RBST; 
}
 
bool isBST(SqBiTree T){
	return BST(T,0);
} 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

xmltodict 处理 XML 数据案例解析

简介&#xff1a;xmltodict 是一个用于将 XML 数据转换为 Python 字典的轻量级模块。它简化了 XML 数据的解析和处理&#xff0c;使得在 Python 中操作 XML 变得更加直观和方便。这个模块适合用于数据交换、配置文件解析等需要 XML 数据处理的场景。 历史攻略&#xff1a; loc…

软件验证与确认实验三-数据驱动测试

目录 1. 实验目的及要求.................................................................................................... 3 2. 实验软硬件环境.................................................................................................... 3 …

ASP.NetCore---I18n(internationalization)多语言版本的应用

文章目录 0.实现的效果如下1.创建新项目I18nBaseDemo2.添加页面中的下拉框3.在HomeController中添加ChangeLanguage方法4.在Progress.cs 文件中添加如下代码&#xff1a;5. 在progress.cs中添加code6.添加Resource资源文件7.在页面中引用i18n的变量8. 重启项目&#xff0c;应该…

【多线程】详解 CAS 机制

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 文章目录 1. CAS 是什么1.1 CAS 具体步骤1.2 CAS 伪代码 2. CAS 的应用2.1 实现原子类2.1.1 AtomInteger 类2.1.2 伪代…

【2024最新】基于springboot+vue的教师人事档案管理系统lw+ppt

作者&#xff1a;计算机搬砖家 开发技术&#xff1a;SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;Java精选实战项…

wxPython中wx.ListCtrl用法(样式和事件)

wx.ListCtrl是一个列表组件&#xff0c;可以以列表视图&#xff08;list view&#xff09;、报表视图&#xff08;report view&#xff09;、图标视图&#xff08;icon view&#xff09;和小图标视图&#xff08;small icon view&#xff09;等多种模式显示列表。 组件样式 wx…

c++grpc详解

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一.简介支持的语言使用场景特点 二.传输原理protobuf传输HTTP2.0流和帧 三.grpc的四种模式1.一元RPC模式2.服务端流3.客户端流4.双向流 四.基本流程 一.简介 gRPC …

Lesson3 - 操作系统软件视角和系统调用

文章目录 硬件支持系统 系统管理硬件异步行为中断的分类 同步行为虚拟地址空间shell系统调用与软中断区分系统调用trace 命令 硬件支持系统 系统管理硬件 计算机硬件由三样东西组成&#xff1a;CPU、内存、I/O设备。为了更有效地管理这些硬件资源&#xff0c;系统设计者引入了…

ElasticSearch备考 -- Search template

一、题目 ### 基础版 Create a search template for the above query, so that the template (i) is named "with_response_and_tag", (ii) has a parameter "with_min_response" to represent the lower bound of the response field, (iii) has a parame…

分治算法(3)_快速选择_数组中的第K个最大元素

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 分治算法(3)_快速排序_数组中的第K个最大元素 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#…

SSH -L 代理与反向代理转发详解

简介&#xff1a;SSH -L 选项用于设置本地端口转发&#xff0c;而反向代理转发则允许远程主机访问本地服务。本文将介绍如何使用 SSH -L 实现本地端口转发和反向代理转发&#xff0c;并提供示例以帮助您理解和应用这些技术。 历史攻略&#xff1a; Centos&#xff1a;设置代理…

国庆假期结束

&#x1f51a; 推迟几天返校 未提前和老师商量&#xff08;其实放假前我也说过的&#xff0c;但是我导可能忘记了&#xff09; 我的确有错&#xff0c;事情总自己觉得行了就觉得可以了 在老师看起来的确有点“不尊重” 下次一定要要要注意⚠️⚠️⚠️ 上次&#xff0c;国…

【Kubernetes】常见面试题汇总(五十九)

目录 129.问题&#xff1a;pod 使用 PV 后&#xff0c;无法访问其内容&#xff1f; 130.查看节点状态失败&#xff1f; 特别说明&#xff1a; 题目 1-68 属于【Kubernetes】的常规概念题&#xff0c;即 “ 汇总&#xff08;一&#xff09;~&#xff08;二十二&#xf…

大语言模型 LLM 量化技术略解

什么是量化? 随着语言模型规模的不断增大,其训练的难度和成本已成为共识。而随着用户数量的增加,模型推理的成本也在不断攀升,甚至可能成为限制模型部署的首要因素。因此,我们需要对模型进行压缩以加速推理过程,而模型量化是其中一种有效的方法。 大语言模型的参数通常…

Python运行态 - 代码调试:掌握pdb

简介&#xff1a;pdb&#xff08;Python Debugger&#xff09;是 Python 标准库中的调试工具&#xff0c;旨在帮助开发者在代码中设置断点、检查变量值和逐行执行代码。这对于定位和修复程序中的问题至关重要。pdb 是 Python 的内置模块&#xff0c;因此不需要额外安装。 历史…

20款奔驰CLS300升级原厂抬头显示HUD 23P智能辅助驾驶 触摸屏人机交互系统

以下是为您生成的一份关于 18 款奔驰 CLS 老款改新款的改装文案&#xff1a; 18 款奔驰 CLS 老款改新款&#xff1a;科技升级&#xff0c;畅享极致驾驶体验 在汽车改装的世界里&#xff0c;每一次的升级都是对卓越的追求。今天&#xff0c;让我们一同探索 18 款奔驰 CLS 老款改…

Leetcode—152. 乘积最大子数组【中等】

2024每日刷题&#xff08;174&#xff09; Leetcode—152. 乘积最大子数组 C实现代码 class Solution { public:int maxProduct(vector<int>& nums) {int n nums.size();int mx nums[0];int mn nums[0];int ans mx;for(int i 1; i < n; i) {const int prem…

贪心算法c++

贪心算法C概述 一、贪心算法的基本概念 贪心算法&#xff08;Greedy Algorithm&#xff09;&#xff0c;又名贪婪法&#xff0c;是一种解决优化问题的常用算法。其基本思想是在问题的每个决策阶段&#xff0c;都选择当前看起来最优的选择&#xff0c;即贪心地做出局部最优的决…

基于yolov8的200鸟类智能检测与识别系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的200种鸟类智能检测与识别系统是一款基于深度学习的目标检测系统&#xff0c;该系统利用YOLOv8框架&#xff0c;通过11788张图片训练出一个能够进行鸟类智能检测与识别的模型&#xff0c;可以识别200种不同的鸟类。 该系统采用Python与PyQt5开发&…

苹果电脑磁盘满了怎么清理内存?必看清理秘籍

对于很多Mac用户来说&#xff0c;随着时间的推移&#xff0c;电脑逐渐变慢并出现磁盘空间不足的提示是一件非常头疼的事情。正确理解内存和存储的区别&#xff0c;并采用有效的清理方法&#xff0c;对于保持Mac性能至关重要。本文将深入探讨如何有效清理Mac上的磁盘空间&#x…