搜索二叉树

news2024/11/16 23:31:17

文章目录

    • 二叉搜索树
      • 模拟实现
        • 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,和红黑树就可以实现了二号擦搜索树的调整使它的性能达到最优。

实现代码

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

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

相关文章

Shennina:一款带有人工智能的自动化主机渗透工具

关于Shennina Shennina是一款功能强大的自动化主机渗透/漏洞利用框架,该项目的主要目的是使用人工智能技术来实现安全扫描、漏洞扫描/分析和漏洞利用开发的完全自动化。Shennina整合了Metasploit和Nmap这两款强大的网络安全工具实现其部分功能,并执行渗…

微搭使用笔记(二)微搭低代码平台介绍及基础使用

概述 官网地址: 官网 官方文档: 官方文档 FAQ: FAQ 腾讯云微搭低代码是一个高性能的低代码开发平台,用户可通过拖拽式开发,可视化配置构建 PC Web、H5 和小程序应用。支持打通企业内部数据,轻松实现企业微信管理、工…

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

别具一格,独此一家,原创唯美浪漫情人节表白专辑 不一样的惊喜哦~!(html5,css3,svg)表白爱心代码(复制就可用)(4) 目录 款式四:时光的记忆款 1、拷贝完整源代码 2、更新时光盒所…

Springboot使用MDC进行日志追踪

Springboot使用MDC进行日志追踪前言一、为什么要跟踪日志二、MDC存储日志原理三、开始代码1、封装MDC工具类2、注册日志追踪拦截器四、配置logBack五、查看追踪效果六、要解决traceId传递问题1、在不同线程之间的传递2、远程调用时候的传递总结前言 MDC(Mapped Diag…

基于ChatGPT +Node.js的基本使用

一、简介 最近,围绕ChatGPT和OpenAI的话题是层出不穷,国内外的技术工作者都掀起了一股学习OpenAI的技术浪潮,甚至有很多的媒体预测OpenAI将会带来行业的革命,而国外一些大的企业也将OpenAI视为重要的竞争对手,比如Google和微软。 事实上,OpenAI 可以应用于任何涉及理解…

SpringBoot(3)之包结构

根据spring可知道,注解之所以可以使用,是因为通过包扫描器,扫描包,然后才能通过注解开发。 那么springboot需要扫描哪里呢? springboot的默认包扫描器,扫描的是自己所在的包和子包,例子如下 我…

生成式AI对业务流程有哪些影响?企业如何应用生成式AI?一文看懂

集成与融合类ChatGPT工具与技术,以生成式AI变革业务流程ChatGPT背后的生成式AI,聊聊生成式AI如何改变业务流程ChatGPT月活用户过亿,生成式AI对组织的业务流程有哪些影响?生成式AI对业务流程有哪些影响?企业如何应用生成式AI?一文看懂业务流…

Transformer

Transformer由4部分组成,分别是:输入模块、编码模块、解码模块、输出模块整体架构图:一、输入模块结构 (1)源文本嵌入层及其位置编码器(2)目标文本嵌入层及其位置编码器二、编码器模块结构由N个…

【计算器】四则运算的算法实现

先实现整数部分 加减乘比较简单, 可以参考: 高精度算法全套(加,减,乘,除,全网最详细). 除法我参考的是: 大数加减乘除运算总结 四则运算相关的OJ题目 四则远算 关于除法 基本上参考的是: 大数加减乘除…

数据结构:队列

队列 队列(Queue)是一个数据集合,仅允许在列表的一端进行插入,另一端进行删除。 进行插入的一端称为队尾(rear),插入动作称为进队或入队 进行删除的一端称为队头(front),删除动作称为出队 队列的性质:先进先出(First-in, First-o…

C++【二叉树进阶(二叉搜索树)】

文章目录前言1、二叉搜索树1-1、 二叉搜索树概念2、二叉搜索树操作2-1、树和节点的基本框架2-2、二叉搜索树的查找2-3、中序遍历2-4、二叉搜索树的插入2-5、二叉搜索树的删除3、二叉搜索树的模拟实现3-1、循环版本3-2、递归版本4、二叉搜索树的应用4-1、K模型4-2、KV模型4-3、K…

Linux 中断实验

目录 一、Linux 中断简介 上半部与下半部 二、添加设备树 三、编写驱动 1、定义宏 2、编写一个key结构体 3、imx6uirq设备添加成员 ​编辑4、按键中断处理函数 5、按键初始化 6、在驱动入口添加初始化 7、 驱动出口函数 代码如下 四、利用定时器进行消抖处理 1、添…

Spring Security in Action 第十四章 实现资源服务器端

本专栏将从基础开始,循序渐进,以实战为线索,逐步深入SpringSecurity相关知识相关知识,打造完整的SpringSecurity学习步骤,提升工程化编码能力和思维能力,写出高质量代码。希望大家都能够从中有所收获&#…

ArcGIS中的附件功能

从ArcGIS10起,空间数据库增加了"附件"的功能,可灵活管理与要素相关的附加信息,可以是图像、PDF、文本文档或任意其他文件类型。例如,如果用某个要素表示建筑物,则可以使用附件来添加多张从不同角度拍摄的建筑物照片。 启动附件功能 要想使用附件功能,要素类必…

Docker 中遇到的问题

1:docker-tomcat 篇 第一天启动主机和虚拟机都可以正常访问,晚上睡觉的时候就挂起关机睡觉了,但到了第二天主机访问不了了,ping 也能ping 通,后来停掉容器,重启了虚拟机就好了,就很离谱。 这是成…

Web3CN|Damus刷频背后,大众在期待什么样的去中心化社交?

刚过去的一周,许多人的朋友圈包括Twitter、Faceboo在内都在被一串公钥字母刷屏,其重要起因就是 Twitter 前首席执行官 Jack Dorsey 发推称,(2月1日)基于去中心化社交协议 Nostr 的社交产品 Damus 和 Amethyst 已分别在…

互联网舆情监测系统的设计研究,TOOM舆情监测系统研究框架?

舆情监测研究分析是指通过对社会公众对某个事件、话题、品牌、政策等的态度和情绪进行收集、处理、分析和评估,帮助政府、企业、媒体等利益相关者及时掌握公众的反应,做好应对危机和制定舆情管理策略的工作,互联网舆情监测系统的设计研究&…

全志V853芯片 如何在Tina V85x平台切换sensor?

目的 V85x某方案目前默认Sensor是GC2053。实际使用时若需要用到GC4663(比如wdr功能)和SC530AI(支持500W),可按如下步骤完成切换。 步骤 下面以GC4663为例,SC530AI按相应方式适配。 Step1 检查Sensor驱动…

Spring Security in Action 第十七章 全局方法安全:预过滤和后过滤

本专栏将从基础开始,循序渐进,以实战为线索,逐步深入SpringSecurity相关知识相关知识,打造完整的SpringSecurity学习步骤,提升工程化编码能力和思维能力,写出高质量代码。希望大家都能够从中有所收获&#…

Rust学习入门--【8】复合类型

复合类型(compound type) 可以将多个不同类型的值组合为一个类型。 Rust中提供了两种内置的复合数据类型:元组(tuple)和数组(array)。 元组类型 元组是一个具有 固定长度 的数据集合 —— 无…