二叉检索树(定义、意义、存储数据元素形式),二叉检索树插入方法的图解和实现

news2025/1/18 11:53:59

1、二叉检索树:

(1)定义

二叉检索树的任意一个结点,设其值为k,则该节点左子树中任意一个结点的值都小于k;该节点右子树中任意一个节点的值都大于或等于k
这里的比较规则可以是针对数字的,也可以是针对字符串的,总之只要该数据项具有可比较的规则,就可以用二叉检索树这样的结构存储
在这里插入图片描述
当二叉检索树结点中存放的数据元素是数字时对二叉检索树进行中序遍历得到一个递增的有序序列
在这里插入图片描述

(2)二叉检索树存在的意义:

数据结构存在的目的是为了用户对数据集合的各种操作(CRUD:增删改查)更便捷快速

对比之前学过的顺序表和链表,二叉树相当于在两者中取了平衡
在这里插入图片描述
增加删除操作背后原理相同,改在查的基础上完成,因此上面的表格可简化成:
在这里插入图片描述

(3)二叉树结点中的内容不一定是数字

前面提到只要数据集合中的数据元素中含有可以比较的数据项,那么就可以采用二叉检索树这样的数据结构
在这里插入图片描述
整个二叉检索树存放数据集合,数据元素存放在二叉树结点中,数据项作为对数据元素进行 增删改查 的key

2、英文字符串的比较规则

(1)示例

在这里插入图片描述

(2)比较规则

在英文字符串的比较中,比较步骤通常遵循字典顺序,即ASCII码的顺序。首先,比较字符串的第一个字符,如果它们不同,那么比较就基于这两个字符的ASCII值;如果相同,则继续比较下一个字符,直到找到不同的字符或者比较完所有字符。

对于’overlap’>'conflagration’这个比较:

比较第一个字符:‘o’(overlap的第一个字符)和’c’(conflagration的第一个字符)。在ASCII码表中,'o’的ASCII值大于’c’的ASCII值。

结果确定:由于第一个字符的比较就已经确定了结果,所以不需要继续比较后面的字符。

基于上述比较步骤,‘overlap’的第一个字符’o’在字典顺序上大于’conflagration’的第一个字符’c’,因此整个字符串’overlap’在字典顺序上也大于’conflagration’。

所以,‘overlap’>'conflagration’的结果是True。

3、假设要存放的数据元素是英文单词及含义。实现一个BST类,它有增删改查等方法

(1)为了操作方便,定义命令符号、命令格式如下

在这里插入图片描述

(2)对命令进行提取key,value

示例

注意,输入的英文含义中如果含有逗号一定是中文逗号
在这里插入图片描述

(3)封装一个Elem()接口

要插入的每一个数据元素都是一个Elem()对象
在这里插入图片描述

(4)插入函数

图解

在这里插入图片描述

代码

在这里插入图片描述

测试样例

在这里插入图片描述

测试结果(中序遍历)

在这里插入图片描述

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

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

相关文章

[大模型]Qwen-7B-Chat 接入langchain搭建知识库助手

Qwen-7B-Chat 接入langchain搭建知识库助手 环境准备 在autodl平台中租一个3090等24G显存的显卡机器,如下图所示镜像选择PyTorch–>2.0.0–>3.8(ubuntu20.04)–>11.8 接下来打开刚刚租用服务器的JupyterLab,并且打开其中的终端开始环境配置…

Scala 03 —— Scala Puzzle 拓展

Scala 03 —— Scala Puzzle 拓展 文章目录 Scala 03 —— Scala Puzzle 拓展一、占位符二、模式匹配的变量和常量模式三、继承 成员声明的位置结果初始化顺序分析BMember 类BConstructor 类 四、缺省初始值与重载五、Scala的集合操作和集合类型保持一致性第一部分代码解释第二…

探索 IntelliJ IDEA 2024.1最新变化:全面升级助力编码效率

探索 IntelliJ IDEA 2024.1最新变化:全面升级助力编码效率 文章目录 探索 IntelliJ IDEA 2024.1最新变化:全面升级助力编码效率摘要引言 IntelliJ IDEA 2024.1 最新变化关键亮点全行代码补全 Ultimate对 Java 22 功能的支持新终端 Beta编辑器中的粘性行 …

synchronized锁升级原理

锁升级过程 jdk1.6之后的优化 synchronized锁有四种状态,无锁,偏向锁,轻量级锁,重量级锁,这几个状态会随着竞争状态逐渐升级,锁可以升级但不能降级,但是偏向锁状态可以被重置为无锁状态。 1、偏…

severstal谢韦尔金属数据集CSV格式转YOLO格式

谢韦尔数据集 在kaggle上即可找到,在csdn、百度、知乎上搜索都能搜到,这里不附下载链接了 谢韦尔数据集的标注为CSV文件,格式如下: 谢韦尔数据集为分割数据集,像素编码格式 格式 谢韦尔数据集为像素编码格式&#…

机器学习:考试复习提纲

该页仅为复习资料,内含博客链接均通过搜索得到。 当然直接访问我的GitHub博客会更方便。 1. 线性回归 Linear Regression https://www.cnblogs.com/geo-will/p/10468253.html 要求1:可以按照自己的理解简述线性回归问题。 回归分析是一种预测性的建模…

【FreeRTOS】RTOS任务的同步与互斥:(二)信号量

【FreeRTOS】RTOS任务的同步与互斥:(二)信号量 信号量概念二值信号量二值信号量概念二值信号量相关API函数二值信号量的案例设计cubeMX配置软件程序设计 计数型信号量计数型信号量概念计数型信号量相关API函数二值信号量的案例设计cubeMX配置…

线程池 ThreadPoolExecutor 配置参数详解

《开发语言-Java》 线程池 ThreadPoolExecutor 参数详解 一、引言二、主要内容2.1 核心构造函数2.2 核心线程数2.3 最大线程数2.4 空闲线程存活时间2.5 keepAliveTime 的时间单位2.6 核心线程在空闲时的回收策略2.7 工作队列2.8 线程工厂2.9 拒绝策略 三、总结 一、引言 提到 …

VOJ 网页跳转 题解 STL栈

网页跳转 用例输入 10 VISIT https://www.jisuanke.com/course/476 VISIT https://www.taobao.com/ BACK BACK FORWARD FORWARD BACK VISIT https://www.jisuanke.com/course/429 FORWARD BACK用例输出 https://www.jisuanke.com/course/476 https://www.taobao.com/ https…

JavaEE进阶:基础知识

JavaEE:Java企业开发 Web网站的工作流程 ⽬前用户对PC端应⽤的开发结构模式主要分为C/S和B/S结构. CS即Client/Server(客户机/服务器)结构. 常⻅的C/S架构的应⽤⽐如QQ,CCTALK,各种⽹络游戏 等等,⼀般需…

吴恩达机器学习理论基础—逻辑回归模型

吴恩达机器学习理论基础—逻辑回归模型 说明:逻辑回归解决的是分类问题:例如常见的二分类问题。即得到的输出结果只有两个值的信息。 逻辑回归概念基础 逻辑回归用来解决数据集为0和1的二分类的问题 使用逻辑回归模型来解决对应的问题则需要使用一个函…

在 Ubuntu 12.10 安装 wxPython

安装 wxPython 可以使用 pip 工具,但在 Ubuntu 12.10 上需要首先安装 wxPython 的依赖项。请注意,Ubuntu 12.10 已于2013年终止支持,建议升级到更高版本的 Ubuntu。以下是在 Ubuntu 12.10 上安装 wxPython 的一般步骤: 一、问题背…

【创建型模式】工厂方法模式

一、简单工厂模式 1.1 简单工厂模式概述 简单工厂模式又叫做静态工厂方法模式。 目的:定义一个用于创建对象的接口。实质:由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。 简单工厂模式…

011、Python+fastapi,第一个后台管理项目走向第11步:建立python+fastapi项目,简单测试一下

一、说明 本文章就是记录自己的学习过程,如果有用您可以参考,没用你就略过,没有好与不好之分,今天主要是参考了gitee上的一些项目,一步一步的往后i建立 对于学习来说,如果您有java c等经验,py…

注意力机制基本思想(二)(自注意力机制)

​🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀《深度学习基础知识》 相关专栏: ⚽《机器学习基础知识》 🏐《机器学习项目实战》 🥎《深度学习项目实…

河北专升本(c语言各种编程题)

目录 第一类、递归调用 第二类、特殊数字 第三类、多维数组 第四类、字符处理 第五类、数学问题 第六类、排序算法 第七类、循环问题 第八类、进制转换 第九类、实际应用 第十类、图形输出 第一类、递归调用 1.汉诺塔:请输入盘子数,输出盘子移动…

JVM 性能调优命令(jps,jinfo,jstat,jstack,jmap)

常用命令:jps、jinfo、jstat、jstack、jmap jps jps查看java进程及相关信息 jps -l 输出jar包路径,类全名 jps -m 输出main参数 jps -v 输出JVM参数jps命令示例 显示本机的Java虚拟机进程: # jps 15729 jar 92153 Jps 90267 Jstat显示主类…

【QT进阶】Qt Web混合编程之html、 js的简单交互

往期回顾 【QT进阶】Qt Web混合编程之VS2019 CEF的编译与使用(图文并茂超详细介绍)-CSDN博客【QT进阶】Qt Web混合编程之QWebEngineView基本用法-CSDN博客【QT进阶】Qt Web混合编程之CMake VS2019编译并使用QCefView(图文并茂超详细版本&…

Mamba论文笔记

Mamba论文 结合序列建模任务通俗地解释什么是状态空间模型?创新点和贡献 为什么Mamba模型擅长捕获long range dependencies? 结合序列建模任务通俗地解释什么是状态空间模型? 状态空间模型(State Space Model, SSM)是…

css设置文字撑满盒子

效果如上&#xff1a; <div style"width: 250px;background-color:red;text-align-last:justify;word-break: keep-all;">为中国崛起而读书</div>