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

搜索二叉树

文章目录

    • 二叉搜索树
      • 模拟实现
        • Insert
        • InsertR()
        • Erase
        • EraseR
      • 搜索树的价值
      • 实现代码

二叉搜索树

在二叉树的基础之上,

  • 左子树的值都比根节点小,右子树都更大。那么他的左右子树也分别叫做二叉搜索树。

  • 查找一个节点,最多查找高度次(建立在这个树是比较均衡的).10亿里面找30次就行,log2^30,如果是满二叉树或者完全二叉树.

  • 如果是单支的,查找的时候O(N)是最坏情况,所以是不成熟的.进而升级为平衡搜索二叉树即AVLTree,RBTree(红黑树)。

子函数调用中序,避免传参的时候无法调用到私有的root。

模拟实现

Insert

  • 搜索树默认是不允许存在重复值,会去重,只留下来一个。所以返回值设置为bool.
  • 数值对比寻找位置时,还需要记录父亲节点便于后续节点连接.

InsertR()

最后将4与3连接起来,是因为在最后一次递归中,root恰好是3右孩子指针的别名,所以开创节点之后,就可以直接连接起来.

image-20230212225143580

Erase

搜索二叉树的删除三种情况:

  • 删除叶子结点,注意父亲节点的右指针置空,别造成野指针。

  • 删除有一个子节点的:子承父业,将儿子交给你爹。

  • 前两种可以当成一个,一定要分清楚情况:如果我是父亲的左,让父亲的左指向我的右。

  • 删除根节点这种有两个孩子节点的:替换法删除,找一个比左子树大 ,比右子树小的节点,进行交换删除就行。

    • 左子树的最右节点,左子树的最左节点
      • 仍然需要记录父亲节点,因为可能最左节点还有右孩子需要连接
  • 如果父亲是空呢?根节点,移动根节点吧!

image-20230212221826361

EraseR

从5开始,要删除8.别名的使用,直接连接就行.

  • 删除一个或者没有孩子节点的节点

image-20230212231633272

  • 删除两个孩子的节点

    image-20230212234713883

搜索树的价值

搜索分为key搜索模型+key-value模型

  • key搜索模型:简单的判断在还是不在
    比如是门禁系统:搜索树存储学生的学号。

  • 给你一篇英语作文,检查一下作文中单词拼写是否都正确?一种方法就是词库中的单词都放在搜索树中,进行判断就行。
    key-value模型通过一个值查找另一个值

    • 中英字典互译

    • 高铁站刷身份证进站:身份证上没有票的信息,通过身份证找到买票信息
      人脸是别再加一层key-value 模型。实现K-V模型只需要将K模型中多添加一个模板参数Value.

    • 统计水果出现次数,统计单词出现的次数。

排序 + 去重:插入俩的一样额就会自动删除一个就是没插入进去.

满二叉搜索树的效率是log2 N.但是在最差的情况下回退化为单边树,效率大大降低O(N)

给定一棵二叉搜索树,根据节点值大小排序所需时间复杂度是线性的
二叉搜索树遍历一遍,就可以得到一个有序序列,因此,时间复杂度为O(N).

如果退化成单只树,二叉搜索树的性能就失去了。后续的AVL,和红黑树就可以实现了二号擦搜索树的调整使它的性能达到最优。

实现代码

相关文章:

搜索二叉树

文章目录二叉搜索树模拟实现InsertInsertR()EraseEraseR搜索树的价值实现代码二叉搜索树 在二叉树的基础之上, 左子树的值都比根节点小,右子树都更大。那么他的左右子树也分别叫做二叉搜索树。 查找一个节点,最多查找高度次(建立在这个树是比较均衡的).10亿里面找…...

CentOS8基础篇5:用户账号与用户组的创建

一、用户与用户组概念 Linux是一个多用户、多任务的服务器操作系统,多用户多任务指可以在系统上建立多个用户,而多个用户可以在同一时间内登录同一个系统执行各自不同的任务,而互不影响。 Linux用户是根据角色定义的,具体分为三…...

阿里云服务器使用

服务器配置CPU&内存:2核(vCPU)2 GiB操作系统:Ubuntu 22.04 64位运行环境部署因为部署用到了nodejs首先,打开终端,并输入以下命令以安装必要的软件包:sudo apt-get install curl接着,使用 curl 命令安装…...

全国空气质量排行,云贵川和西藏新疆等地空气质量更好

哈喽,大家好,春节刚刚过去,不知道大家是不是都开始进入工作状态了呢?春节期间,允许燃放烟花爆竹的地区的朋友们不知道都去欣赏烟花表演没有?其他地区的朋友们相比烟花表演可能更关心燃放烟花爆竹造成的环境…...

Learning C++ No.8【内存管理】

引言: 北京时间:2023/2/12/18:04,昨天下午到达学校,摆烂到现在,该睡睡,该吃吃,该玩玩,在一顿操作之下,目前作息调整好了一些,在此记录,2月11&…...

『 MySQL篇 』:MySQL表的相关约束

基础篇 MySQL系列专栏(持续更新中 …)1『 MySQL篇 』:库操作、数据类型2『 MySQL篇 』:MySQL表的CURD操作3『 MySQL篇 』:MySQL表的相关约束文章目录 1 . 非空约束 (not null)2 . 唯一性约束(unique)3 . check约束4 . 默认约束(default)5 . 主…...

家政服务小程序实战教程10-分类展示

小程序一般底部菜单栏会有一个分类的功能,点击分类,以侧边栏导航的形式列出所有类目,点击某个类目可以做数据筛选,我们本篇就实现一下该功能 01 优化数据源 在我们家政服务小程序里,我们已经建立了类型和服务的数据源…...

一篇文章带你学会Ansible的安装及部署

目录 前言 一、什么是Ansible 二、Ansible的工作方式 三、Ansible的安装 四、构建Anisble清单 1、清单书写方式 2、清单查看 3、清单书写规则 4、主机规格的范围化操作 五、ansible命令指定清单的正则表达式 六、 Ansible配置文件参数详解 1、配置文件的分类与优先…...

opencv常用函数

1)读视频 img cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) if vc.isOpened():ret, frame vc.read() else:ret False while ret:#此处省略具体的操作ret, frame vc.read() # 读下一帧 vc.release() 2)保存视频 def mk_video_writer(vc, path,frame_…...

Java集合框架常见面试题

1. 剖析面试最常见问题之 Java 集合框架 1.1. 集合概述 1.1.1. Java 集合概览1.1.2. 说说 List,Set,Map 三者的区别?1.1.3. 集合框架底层数据结构总结 1.1.3.1. List1.1.3.2. Set1.1.3.3. Map 1.1.4. 如何选用集合?1.1.5. 为什么要使用集合? 1.2. Colle…...

医用雾化器单片机方案设计

产品概述 雾化器是一款基于电路板的振荡信号被大功率三极管进行能量放大,传递给压电陶瓷片,当压电陶瓷片受电信号的激励,产生高频谐振,并使吸附在微孔膜上的液体结产生超声振荡,将液体的结构打散而产生自然飘逸的雾。不…...

python魔术方法(一)

所谓的魔术方法就是让用户客制化类的方法,常常是python中开头有两个下划线的方法。 __new__() new是创建一个类的过程 class A:def __new__(cls,x):print("__new__")return super().__new__(cls)由于new函数是建立了一个对象,所以必须返回一…...

IDEA配置部署tomcat详细步骤(maven web 和Javaweb)

目录 读者手册 一、概念与准备工作 (一)概念 (二)准备工作 (三)IDEA配置tomcat服务器(maven web项目演示) ( 四)Javaweb项目创建tomcat演示 读者手册 读…...

没有设置密码,每次打开RAR文件却都要输密码?

有小伙伴说遇到这种情况:用WinRAR软件压缩RAR文件后,再次打开时显示需要输入密码,但自己压缩文件时并没有设置密码,后续不管几次压缩文件都需要密码,这是怎么回事呢? 其实,这很可能是之前设置压…...

想要知道有哪些免费API接口,看它就够了

免费API它来啦! 微信开放平台 https://open.weixin.qq.com/ 让你的应用支持微信登录、微信分享、微信支付等功能。 百度地图开放平台 https://lbsyun.baidu.com/index.php?titlewebapi 百度地图Web服务API为开发者提供http/https接口,即开发者通过…...

【Java】二叉树

一、树形结构 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: 有一个特殊…...

C++学习记录——구 模板初阶

文章目录1、泛型编程和函数模板1、函数模板的实例化2、模板参数的匹配原则2、类模板1、泛型编程和函数模板 泛型编程顾名思义,泛用性很高。之前C可以用重载来对付同名函数,但还是麻烦,有一个类型的变量就得写一个类型的函数。C对此创建了库这…...

筑基五层 —— 位运算看这篇就行了

目录 一.修炼必备 二. 位运算 二.移位运算符 三.位运算综合使用 恭喜你,成功突破至筑基五层!!! 一.修炼必备 1.入门必备:VS2019社区版,下载地址:Visual Studio 较旧的下载 - 2019、2017、201…...

windows安装proget实现nuget私有包部署

下载proget 官网 下载地址 免费下载 安装proget 下载完成之后双击安装 选择ProGet 默认选择即可 也可以指定数据库,SQL Server数据库 Server服务器名;Database数据库名;User Id用户名;Password密码 Serverlocalhost;DatabaseProGet2;User Idsa;Passwordxxxx…...

SpringBoot简单集成OpenFeign

问题 在SpringBoot中简单集成Feign&#xff0c;不想使用Rest Temple了。 步骤 Maven <properties><spring.cloud-version>2022.0.1</spring.cloud-version></properties> <dependencyManagement><dependencies><dependency><g…...

dfs(九)字符串的全排列

字符串的排列_牛客题霸_牛客网【牛客题霸】收集各企业高频校招笔面试题目&#xff0c;配有官方题解&#xff0c;在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力https://www.nowcoder.com/practice/fe6b651b66ae47d7ac…...

别具一格,原创唯美浪漫情人节表白专辑,(复制就可用)(html5,css3,svg)表白爱心代码(1)

别具一格&#xff0c;原创唯美浪漫情人节表白专辑&#xff0c; (复制就可用)&#xff08;html5,css3,svg)表白爱心代码(1) 一、 前言 回眸之间&#xff0c;丰盈了岁月&#xff0c;涟漪了思绪&#xff0c;轻轻落笔&#xff0c;不写伤痕&#xff0c;不写仇怨&#xff0c;只写岁月…...

Hudi-集成Spark之spark-sql方式

Hudi集成Spark之spark-sql方式 启动spark-sql # 启动spark-sql之前需要先启动Hive的Metastore nohup hive --service metastore & #针对Spark 3.2 spark-sql \--conf spark.serializerorg.apache.spark.serializer.KryoSerializer \--conf spark.sql.catalog.spark_catal…...

快速排序基本原理

快速排序基本原理1.快速排序1.1 基本原理1.2 快速排序执行步骤1.2.1 分区包含步骤1.2.1 分区步骤1.3 快速排序大O记法表示2. 将[0,5,2,1,6,3]进行快速排序 【实战】2.1 第一次分区步骤2.2 第二次分区步骤2.3 第三次分区步骤2.4 第四次分区步骤3.快速排序代码实现1.快速排序 1.…...

Android开发笔记-提纲(连载中....)

文章目录Android概述Android开发学习笔记提纲1. 认识AS开发Android的基础入门知识2. 认识Activity的生命周期和基础使用3. 认识Activity之间的跳转和传值4. 认识Intent以及全局Activity的属性的共享5. 认识Service6. 学习跨应用服务【AIDL通信】Android概述 Android系统框架的四…...

React Native(一)

移动端触摸事件example1:<ButtononPress{() > {Alert.alert(你点击了按钮&#xff01;);}}title"点我&#xff01;" />Touchable 系列组件TouchableHighlight 此组件的背景会在用户手指按下时变暗TouchableNativeFeedback 会在用户手指按下时形成类似墨水涟…...

Kotlin 26. Kotlin 如何播放音频文件

Kotlin 如何播放音频文件 文章目录Kotlin 如何播放音频文件1 下载并放置音频文件2 activity_main.xml3 MainActivity.kt1 下载并放置音频文件 我们可以随便下载一个音频文件&#xff0c;比如 alarm.mp3&#xff0c;需要将其放置在 /res/raw/ 路径下。 2 activity_main.xml 这…...

recv和明文收包分析

我们CTRLg 跳到recv 分析收包函数 发现函数会断并且收包函数返回值(收包包长)也会不断变化 那么证明recv是真正的收包函数&#xff0c;游戏没有重新实现该函数 我们只要分析该函数即可 在recv函数执行完毕以后下断 eax是包长,esi28是包指针 我们上2个号&#xff0c;让另外…...

【IVIF的超分重建】

Multimodal super-resolution reconstruction of infrared and visible images via deep learning &#xff08;基于深度学习的红外和可见光图像多模态超分辨率重建&#xff09; 提出了一种基于编解码器结构的红外-可见光图像融合方法。图像融合任务被重新表述为保持红外-可见…...

“深度学习”学习日记。--加深网络

2023.2.13 深度学习 是加深了层的深度神经网络的学习过程。基于之前介绍的网络&#xff0c;只需要通过 叠加层&#xff0c; 就可以创建深度网络 之前的学习&#xff0c;已经学习到了很多东西&#xff0c;比如构成神经网络的各种层、参数优化方法、误差反向传播法&#xff0c;…...

wordpress 4.9.5 太卡/seo搜索引擎优化心得体会

转载地址&#xff1a;https://mp.weixin.qq.com/s/98D_VtkFEM5bZsu9cazggg? 目录 场景一 程序操作数据过大场景二 程序操作大数据时产生拷贝场景三 配置不合理系统资源耗尽场景四 无用的数据未及时释放深入了解php内存管理php-fpm内存泄露问题常驻进程内存泄露问题前言 本文开…...

网站建设 风险说明/百度最新人工智能

当下已有多家安卓手机企业降价抛售搭载骁龙8G1的手机了&#xff0c;原因是骁龙8G1的发热量太大了&#xff0c;而由台积电代工生产的骁龙8G1也快上市了&#xff0c;降价抛售骁龙8G1手机成为安卓手机企业无奈的选择。高通发布的骁龙8G1饱受发热诟病&#xff0c;在首款搭载这款芯片…...

专业做网站的公司有/线上卖货平台有哪些

1.找到此电脑&#xff0c;右击点击属性 2.左边侧栏&#xff0c;高级系统设置 3.系统属性中点击高级 4.点击环境变量 5.可以看到 某某某用户变量和系统变量两个方框 其中&#xff0c;系统变量是要你在打开cmd是用管理员身份运行所使用的环境变量 而上一个用户变量则是平时正常打…...

wordpress+悬浮按钮/抖音推广运营

当使用布局后窗口可以根据缩放自动调整控件显示方式&#xff0c;比如自动调整大小距离比例、自动防止文字不被遮挡、是否显示窗口滑条等。 在设计模式下可以极为方便地使用布局&#xff0c;注意要使用顶端工具栏中的布局按钮设置布局&#xff1a; 布局需要添加到共同的parent部…...

怎么自己做网站模板/谷歌推广费用多少

首先安装LNMP环境,要求PHP-5.3以上版本.参考:http://isadba.com/?p82 或者参考 http://isadba.com/?p572然后下载Anemometergit clone https://github.com/box/Anemometer.git anemometer配置LNMP将下载下来的anemometer部署到LAMP上面,可以通过web打开页面,会提示你没有配置…...

镇平县两学一做专题网站/自媒体平台有哪些

1 效果图2 知识点2.1 turtle的动画设计&#xff0c;通过游戏设计&#xff0c;增强学习兴趣。2.2 turtle.shape已有图形调用和自定义shape图形(gif格式)。2.3 python编程设计思维和相关知识复习。2.4 代码讲解清楚&#xff0c;小白秒懂&#xff0c;一秒入门&#xff0c;值得收藏…...