搜索二叉树

目录:

              1.搜索二叉树的概念

              2.对搜索二叉树实现插入Insert函数和InOrder中序遍历函数

              3.删除

              4.实现搜索二叉树的递归

              5.拷贝问题

              6.搜索二叉树的缺陷

--------------------------------------------------------------------------------------------------------------------------------

1.搜索二叉树的概念

搜索二叉树又称二叉排序树,它或者是一颗空树

特征:1.若它的左子树不为空,则左子树上所有节点的值都小于跟节点的值

           2.若它的右子树不为空,则右子树上所有节点的值都大于跟节点的值

           3.它的左右子树也分别为二叉搜索树

如果我要查找6   ---->最多查找高度次

为什么又叫二叉排序树呢???

我们对上面的树走一个中序遍历(先遍历左树,在遍历根,在遍历右树)

4  -->  5 ----> 6 --->8 ---->10---->11

------------------------------------------------------------------------------------------------------------

2.对搜索二叉树实现插入Insert函数

 我们先简单的实现一个Insert插入函数

 这时候我们还需要在最后找到了插入的位置时,new出来的节点,前后连接一下,找到这个空节点的父亲

 InOrder中序遍历

 怎么解决呢???

 

查找函数Find

 -------------------------------------------------------------------------------------------------------------------------

3.删除

 

 我们现在来看最后一个情况  --》 左右都不为空

我们统一用删除节点的右子树最小值来删除

 

 我们来验证一下Erase

 

 --------------------------------------------------------------------------------------------------------------------

 我们现在完成了搜索二叉树的增删查

我们想像搜索二叉树为什么不支持改呢??

 ------------------------------------------------------------------------------------------------------------------------

4.实现搜索二叉树的循环

1.先实现一个递归查找

假如我们在这里要找的值是6,我们来看看递归是怎么找的

 -------------------------------------------------------------------------------------------------------------------------------

插入递归的实现!!!

这样子可以完成我们的插入嘛,我们来走走看

 可是我们怎么巧妙的和父亲链接在一起呢???当然我们也可以把父亲传下去,这个是最普通的做法了,我们可以有更巧妙的做法

我们加个引用来看看  ----  前面的引用都不起作用,只有在最后一下

 ---------------------------------------------------------------------------------------------------------------------------

我们现在来实现一下递归删除

 如果我们删除左右都不为空的呢???

 -------------------------------------------------------------------------------------------------------------------------------

5.拷贝问题

我们拷贝了之后发现是没有问题的,可是实际上是有问题的

我们还没有写拷贝构造,那么这里就是浅拷贝,浅拷贝针对于内置类型默认生成的是浅拷贝

 现在没崩的原因是没写析构

 这时候就会出现野指针的问题了,就是由于浅拷贝导致的

那么我们应该这么进行深拷贝呢??

 

 这时候我们自己写一个默认的构造

这时候就没有问题了

 那么赋值呢??

 ------------------------------------------------------------------------------------------------------------------------

6.搜索二叉树的缺陷

 

所以搜索二叉树还是有缺陷的

需要被改进---》改进的方案就是平衡树   -----  AVL树、红黑树

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python Websocket 控制大屏显示

场景描述: 在做大屏展示时,有这样一个需求:在不刷新页面的情况下,动态改变大屏展示内容,如:执行某个函数,把相关数据醒目展示,轮换数据显示顺序等等。比如有领导参观时,马…

通过阿里云函数计算FC实现音视频转码

1.进入阿里云函数计算FC页面 2.创建音视频转码应用 可以看到代码,看到相关的传参 3.进行测试 编辑测试参数,使用账号的OSS中的资源 点击测试函数进行测试 可以在OSS中看到生成的mp4格式的视频了 测试后发现函数计算可以使用 4. 接下来就是在项目中通过代…

logback日志的分片压缩

logback-spring.xml <?xml version"1.0" encoding"UTF-8"?> <configuration debug"true"><springProperty name"LOG_PATH" source"shands.log.logPath" defaultValue"/var/delonix/logs/local"…

el-date-picker禁用指定日期之前或之后的日期

一、elementUI中el-date-picker禁用指定日期之前或之后的日期 通过配置picker-options配置指定禁用日期&#xff08;pickerOptions写到data里面&#xff09; <el-date-pickerv-model"date"type"date"size"small"value-format"yyyy-MM-d…

基于matlab使用视频和深度学习进行手势识别(附源码)

一、前言 此示例首先演示如何使用预训练的SlowFast视频分类器执行手势识别&#xff0c;然后演示如何使用迁移学习在自定义手势识别数据集上训练分类器。 基于视觉的人类手势识别涉及使用一组视频帧预测手势&#xff0c;例如挥手打招呼、手语手势或鼓掌。手势识别的一个吸引人…

【VSCODE】4、vscode git pull/push 报错 remote: HTTP Basic: Access denied

一、报错示例 在执行 git pull/push 的时候报错如下 二、解决方式 该问题来自 vscode 的身份验证 打开 vscode →code → 首选项 → 设置搜索 git.terminalAuthentication取消选中该选项重启终端即可

5.8.5 TCP可靠传输(一)序号确认机制

5.8.5 TCP可靠传输&#xff08;一&#xff09;序号确认机制 TCP是可靠的传输层协议&#xff0c;主要通过序号确认机制、超时重传机制、定时器三个方面实现可靠传输。 一、序号确认机制 TCP将所要传送的整个的应用层报文看成是一个一个字节组成的数据流&#xff0c;并对每一个…

sql统计某一字段不同状态的数量,时间戳转日期格式、按月统计使用

背景 1、在sql语句中统计一个字段的不同状态时&#xff0c;需要将每个状态的数量查出来&#xff0c;在进行统一输出&#xff0c;涉及表多次查询&#xff0c;下面用一个聚合函数的方式进行查询&#xff0c;比较方便&#xff0c;容易理解。 2、有时候数据表中的时间字段存储的是…

Jmeter使用之:怎么编写扩展函数(二)

目录 前言&#xff1a; 1、实现function的类的package声明必须包含".functions" 2、需要继承org.apache.jmeter.functions.AbstractFunction&#xff0c;并且实现相应的方法。 第一步&#xff1a;eclipse 导入jmeter目录&#xff1a;apache-jmeter-2.13libext下的…

卡尔曼滤波简单实例分析

1 现实问题 假设一个物体位于1000米处以自由落体运动&#xff0c;底面有一台具有特殊功能的雷达&#xff0c;对其进行观察&#xff0c;现需要对其下落的高度进行测量&#xff1b; &#xff08;1&#xff09;建模 速度&#xff1a;V gt 位置&#xff1a;Y -Vt Y0 &#xff0…

ES6: 模版字符串

前言: ES5 中我们表示字符串的时候使用 或者 "" 作用: 在 ES6 中&#xff0c;我们还有一个东西可以表示字符串&#xff0c;就是 &#xff08;反引号&#xff09; let str hello worldconsole.log(typeof str) // string和单引号还有双引号的区别: 反引号可以换行…

Android 应用层 到 HAL 层

Android 应用层 到 HAL 层 1、相关知识点1.1 概要1.2 参考 2、拿SensorService举例2.1 Android Apps > Android Framework阶段2.2 Android Framework内部阶段2.2.1 frameworks/base2.2.2 frameworks/native 2.3 Android Framework > HAL 阶段2.3.1 旧版 HAL 1、相关知识点…