二叉检索树 及 插入方法的图解、实现、时间代价分析

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、假设要存放的数据元素是英文单词及含义。

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

在这里插入图片描述

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

示例

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

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

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

4、插入函数

(1)图解

在这里插入图片描述

(2)代码

在这里插入图片描述

测试样例

在这里插入图片描述

测试结果(中序遍历)

在这里插入图片描述

(3)时间代价

不同的插入顺序会导致树形不同、尤其是树的高度不同

(1)顺序插入

在这里插入图片描述
逆序插入类似,都会导致二叉树不平衡,时间代价是O(n)

(2)打乱顺序插入

在这里插入图片描述
当树极度不平衡时,要插入元素若均大于树中元素,那么最坏情况将是O(n)

当树比较平衡时,要插入最大元素,最坏情况将是O(logn)

(4)假如没有封装的Elem()类

代码会比较冗余

代码

在这里插入图片描述

运行结果

在这里插入图片描述

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

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

相关文章

工程上有哪些实用且简单的滤波方法?

一、工程滤波 在工程实践过程中,以下是一些常用的滤波方法及其优缺点: 限幅滤波 优点:简单易行,能够有效去除突变的大噪声,保护后续电路和传感器不受损伤。 缺点:可能会丢失信号的真实峰值,对真…

有关栈的练习

栈练习1 给定一个栈(初始为空,元素类型为整数,且小于等于 109),只有两个操作:入栈和出栈。先给出这些操作,请输出最终栈的栈顶元素。 操作解释: 1 表示将一个数据元素入栈&#xff…

平衡二叉树(后序遍历,力扣110)

解题思路:采取后序遍历的好处是先遍历节点得到高度,然后再判断高度差是否大于一,如果是的话就返回-1,不是就返回两高度中较大的高度加一就是父节点的高度 具体代码如下: class Solution { public: int travel(TreeN…

antDesign Form表单校验(react)

<script><Form name"basic" ref{formRef} onFinish{onFinish}><Form.Itemlabel校验name"check"rules{[// 校验必填{required: true,message: 请输入&#xff01;},// 校验输入字符数限制{validator: (_, value) >value && value…

TCP三次握手,但通俗理解

如何用通俗的语言来解释TCP&#xff08;传输控制协议&#xff09;的三次握手过程&#xff1f; 想象一下你正在和朋友电话沟通&#xff0c;但你们之间不是心灵感应&#xff0c;而是需要通过清晰地听到对方的声音来确认通话质量良好。TCP三次握手就像是在电话拨通之前&#xff0…

OMNeT++与无线通信网络仿真——第二部分INET框架介绍 阅读笔记

13.5 熟悉INET框架 INET框架建立在Omnet基础上&#xff0c;并且使用相同的概念&#xff0c;即模块通过消息传递通信。 主机、路由器、交换机和其他网络设备有OMNeT复合模块表示。这些复合模块由表示协议、应用和其他功能单元的简单模块组成。网络又是一次包含主机、路由器和其…

怎么把网页上的文字变小?

以下是针对常见浏览器的说明&#xff1a; ### Google Chrome&#xff1a; 1. 打开 Chrome 浏览器并导航到您想要调整文字大小的网页。 2. 在页面上右键单击空白处&#xff0c;然后选择 "检查" 或按下 CtrlShiftI&#xff08;在 Windows 或 Linux 上&#xff09;或 Co…

混合现实(MR)开发框架

混合现实&#xff08;MR&#xff09;开发框架为开发者提供了构建MR应用程序所需的基本工具和功能。它们通常包括3D引擎、场景图、输入系统、音频系统、网络功能以及支持同时处理现实世界和虚拟世界信息的功能。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&…

java-springmvc 01

MVC就是和Tomcat有关。 01.MVC启动的第一步&#xff0c;启动Tomcat 02.Tomcat会解析web-inf的web.xml文件

java-spring 图灵 04 doscan方法,重点是scanCandidateComponents方法

01.本次的重点依旧是扫描函数&#xff0c;这次是spring中的源码&#xff1a; 02.第一步&#xff0c;构造AnnotationConfigApplicationContext 主方法&#xff1a; public static void main(String[] args) {// 创建一个Spring容器AnnotationConfigApplicationContext applica…

我们一起看看《看漫画学C++》中如何讲解对象的动态创建与销毁

《看漫画学C》这本书中会用图文的方式生动地解释对象的动态创建与销毁。在C中&#xff0c;动态创建对象是通过new运算符来实现的&#xff0c;而销毁对象则是通过delete运算符来完成的。这种方式可以让程序在需要时分配内存给对象&#xff0c;并在对象不再需要时释放内存&#x…

MambaDFuse:一种基于mamba的多模态图像融合双相位模型

MambaDFuse:一种基于mamba的多模态图像融合双相位模型 摘要IntroductionRelated WorksMethodComparison with SOTA methodsAblation StudyDownstream IVF applications Conclusion 摘要 多模态图像融合&#xff08;MMIF&#xff09;旨在将来自不同模态的互补信息整合到单一的融…

(四)相关性分析 学习简要笔记 #统计学 #CDA学习打卡

目录 一. 相关性分析简介 二. 相关性分析方法 1&#xff09;连续型变量vs连续型变量&#xff1a;Pearson/Spearman &#xff08;a&#xff09;Pearson &#xff08;b&#xff09;Spearman等级相关系数 2&#xff09;二分类变量&#xff08;自然&#xff09;vs连续型变量&…

【C++干货基地】面向对象核心概念 const成员函数 | 初始化列表 | explicit关键字 | 取地址重载

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引入 哈喽各位铁汁们好啊&#xff0c;我是博主鸽芷咕《C干货基地》是由我的襄阳家乡零食基地有感而发&#xff0c;不知道各位的…

前端从零到一搭建脚手架并发布到npm

这里写自定义目录标题 一、为什么需要脚手架&#xff1f;二、前置-第三方工具的使用1. 创建demo并运行-4步新建文件夹 zyfcli&#xff0c;并初始化npm init -y配置入口文件 2.commander-命令行指令3. chalk-命令行美化工具4. inquirer-命令行交互工具5. figlet-艺术字6. ora-lo…

Oracle数据库的简单使用

Oracle简单使用 一、数据库的介绍二、Oracle介绍账号管理Oracle的安装Oracle服务的作用OracleRemExecService服务创建数据库 常用命令 三、SQL语言SQL分类实用的数据表添加注释数据操纵语言&#xff08;DML&#xff09;查询语句&#xff08;SELECT&#xff09;wherelikedistinc…

ShardingSphere:强大的分布式数据库中间件【图文】

ShardingSphere的诞生 ShardingSphere的结构 Sharding-JDBC :它提供了一个轻量级的 Java 框架&#xff0c;在 Java 的 JDBC 层提供额外的服务。使用客户端直连数据库&#xff0c;以 jar 包形式提供服务&#xff0c;无需额外部署和依赖&#xff0c;可理解为增强版的 JDBC 驱动&…

如何使用 Cloudflare 和 Mailgun 设置自定义电子邮件

作为一名软件工程师&#xff0c;您可能考虑拥有一个专业的电子邮件账户&#xff0c;以及自己的网站&#xff0c;比如 “infoexample.com”. 但这可能会花费一定金额&#xff0c;您可能不愿意支付。 但您知道您可以免费做到吗&#xff1f;事实上&#xff0c;有一种方法可以做到…

error解决expression before ‘static‘

问题现象 报警如下 跳转到提示第125行&#xff0c;但是这行明显是没有问题的。 问题分析 经过排查可以看到&#xff0c;是120行的末尾\在S32DS编译器里面被认为是“接下一行”的意思&#xff0c;120行注释掉之后&#xff0c;后面的121行、122行、123行均被注释掉&#xff0c;…

得物sign参数逆向分析与Python算法还原

文章目录 1. 写在前面2. 接口分析3. 断点分析4. Python算法还原 【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚…
最新文章