java-数据结构—树

目录

树的组成

节点

根节点

其他组成部分

二叉树

普通二叉树

二叉查找树

二叉树的遍历

前序遍历

中序遍历

后序遍历

层序遍历

总结

平衡二叉树

平衡二叉树的旋转机制

左旋

右旋

需要旋转的四种情况

左左

左右

右右

右左

总结

红黑树


树的组成

节点

先引入树的组成:节点

节点又分为父节点,左子节点和右子节点

节点的组成是什么呢

度:是每一个节点的子节点的数量

所以在二叉树中,任意节点的度<=2

根节点

最顶层的节点

其他组成部分

二叉树

普通二叉树

满足度小于等于2的普通的树

二叉查找树

特点:度小于等于2

左子节点小于当前节点

右子节点小于当前节点

二叉树的遍历

我也不知道如何介绍,看图片以及结合文字思考一下,很容易就能明白

图片左侧是遍历后的结果,顺序是从左往右,从上往下

前序遍历

中序遍历

后序遍历

层序遍历

总结

平衡二叉树

规则:任意节点左右子树高度差不超过1

如下图,你不能只看根节点,你还得看其他的所有节点,看看所有节点的左右子树高度差是否超过一;

注意:没有左(右)节点时,我们认为该节点的左(右)节点的高度为0

举例:左侧二叉树的10节点,他没有左节点,所以左节点高度为0,右节点高度为3,高度差为3,所以不是平衡二叉树

平衡二叉树的旋转机制

旋转分为左旋和右旋;

触发时机:当添加一个节点后,平衡二叉树不再平衡,就要进行相应的旋转

左旋

类型一:不平衡的节点不是根节点时

举个例子:

下图是一个平衡二叉树

在11节点处添加右节点12,此时二叉树不再平衡,如下图

然后我们要找到导致不平衡的节点

方法如下:也就是从我们添加的12节点处开始往上找,判断节点是否平衡,知道找到不平衡的节点为止,如下图我们找到了10

所以接下来我们要对其进行左旋

步骤如下图

类型二:不平衡的节点是根节点时

举例

加节点前

加节点后

找不平衡节点

最后发现是根节点7不平衡

进行左旋

步骤如下图

右旋

这个和左旋基本操作类似,所以我不多加详细介绍了,直接给图

类型一:不平衡的节点不是根节点时

右旋前

右旋后

类型二:不平衡的节点是根节点时

​​​​​右旋前

右旋后

需要旋转的四种情况
左左

旋转前,添加节点分别是1和3

旋转后

左右

旋转前,添加节点为6

第一次局部左旋,变成左左的情况

第二次整体右旋

右右

旋转前,12为添加节点

一次左旋即可

右左

旋转前,8为添加节点

对根节点的右子树进行局部右旋,得到

此时变为了右右的情况了,再对他进行整体左旋

总结

红黑树

(有点复杂,不好讲述,自行看图片介绍)

是一个二叉查找树,高度不平衡,满足红黑规则

红黑规则

添加节点的规则

注意:这里的叔叔,个人认为是伯伯,比较是父亲的兄弟,也就是说,如果父是左(右)子节点,则叔就是右(左)子节点

其余的自己看,按照步骤走

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

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

相关文章

【图(2)】:图的广度优先遍历和深度优先遍历

目录 图的遍历 一、图的广度优先遍历&#xff08;bfs&#xff09; 二、图的深度优先遍历 图的遍历 给定一个图G和其中任意一个顶点v0&#xff0c;从v0出发&#xff0c;沿着图中各边访问图中的所有顶点&#xff0c;且每个顶点仅被遍历一次。"遍历"即对结点进行某种…

MySQL 8.0 的执行计划(EXPLAIN)

MySQL 8.0 的执行计划&#xff08;也称为“EXPLAIN”计划&#xff09;是数据库优化器为 SQL 查询生成的步骤序列。解读执行计划可以帮助数据库管理员&#xff08;DBA&#xff09;和开发者理解查询如何执行&#xff0c;识别潜在的性能问题&#xff0c;并据此优化查询。 下面是如…

一、实战前的准备

目录 系列文章目录 前言 二、项目搭建 三、模块分配 总结 前言 通用后台管理系统使用vue2&#xff0c;使用vue cli构建工具&#xff0c;同时还会使用到element-ui框架进行页面布局&#xff0c;实现顶部导航菜单与左侧导航联动。下面先从三个方面介绍一下通用后台管理的核心…

C++初阶:模板

目录 一.泛型编程 二.函数模板 2.1.函数模板的概念 2.2.函数模板的格式 2.3.函数模板的原理 2.4.函数模板的实例化 隐式实例化 显示实例化 2.5.模板参数的匹配原则 三.类模板 3.1.类模板的格式 3.2.类模板的实例化 3.3.在类模板外部定义成员函数 四.非类型模板参…

系统设计学习(一)分布式系统

分布式系统 CAP 理论 CAP 理论是分布式系统设计中的一个基本原则&#xff0c;它提供了一个思考和权衡一致性、可用性和分区容错性之间关系的框架。 CAP 理论的三个要素如下&#xff1a; 一致性&#xff08;Consistency&#xff09;&#xff1a;在分布式系统中的多个副本或节…

【保姆级】Protobuf详解及入门指南

目录 Protobuf概述 什么是Protobuf 为什么要使用Protobuf Protobuf实战 环境配置 创建文件 解析/封装数据 附录 AQin.proto 完整代码 Protobuf概述 什么是Protobuf Protobuf&#xff08;Protocol Buffers&#xff09;协议&#x1f609; Protobuf 是一种由 Google 开…

PostgreSQL数组查询是否存在某个值

语法 值 ANY (字段);例子 查询ids中包含id5的数据 select * from student where 5 ANY (ids)mybatis select * from student where #{id} ANY (ids)

CrossOver2024实现Mac/Linux上快速运行Win软件和游戏

作为软件产品专家&#xff0c;我对各类软件都有较为深入的了解&#xff0c;下面介绍CrossOver2024这款软件的功能特点。 CrossOver2024是一款功能强大的类虚拟机软件&#xff0c;它的设计目标是在Mac和Linux系统上实现Windows软件和游戏的快速运行。这款软件不仅具有出色的兼容…

Windows下安装Kafka3

本文讲述Windows(win10)下安装Kafka3的方法。基本流程跟《CentOS下安装Kafka3》一样&#xff0c;也是一样需要先安装Java环境&#xff0c;再部署部署Kafka。 首先在官网 Apache Kafka 下载Kafka二进制压缩包。无论是在CentOS还是在Windows下都是下载该压缩包&#xff0c;里面已…

微信小程序实现上下手势滑动切换

效果图 思路 实现一个微信小程序的复合滚动页面&#xff0c;主要通过Swiper组件实现垂直方向的轮播功能&#xff0c;每个轮播项内部使用Scroll-View组件来展示可垂直滚动的长内容&#xff0c;如图片和文本。 代码 <!-- wxml --> <view class"swiper-container…

【硬件工程师面经整理28_其它】

【硬件工程师面经整理27_其它】-CSDN博客By Along 文章目录 1 怎么画时钟线2 LVTTL和LVCMOS电平的是否可以直接互连&#xff1f;3 IC设计流程半波振子的知识&#xff0c;如何拓展带宽 1 怎么画时钟线 时钟线通常用一条带箭头的直线来表示&#xff0c;箭头指向信号变化的方向。…

Vue 中的 key:列表渲染的秘诀

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

编程笔记 html5cssjs 011 HTML内连框架 个人简历二

编程笔记 html5&css&js 011 HTML内连框架 个人简历二 一、代码二、解释 这段HTML代码定义了一个个人简历的页面布局和样式。页面分为多个部分&#xff0c;包括基本信息、自我评价、工作经历、教育经历、项目经历和期望的职业方向。每个部分都使用了自定义的样式&#x…

Flutter入门学习——Flutter和Dart

因为工作的需要&#xff0c;也为了个人发展&#xff0c;现在的话&#xff0c;转战Flutter跨端开发了&#xff0c;虽然目前的项目只发了android端&#xff0c;但是那天尝试了一下Ios的打包流程&#xff0c;也能运行&#xff0c;只是IOS那边的打包稍微复杂一些。 差不多学习了一…

vue+elementUI用户修改密码的前端验证

用户登录后修改密码&#xff0c;密码需要一定的验证规则。旧密码后端验证是否正确&#xff1b;前端验证新密码的规范性&#xff0c;新密码规范为&#xff1a;6-16位&#xff0c;至少含数字/字母/特殊字符中的两种&#xff1b;确认密码只需要验证与新密码是否一致&#xff1b; 弹…

Linux进程概念(1)

一、冯诺依曼体系结构 学过计组的同学应该都很熟悉这个结构&#xff0c;可以说这是计算机的基础了&#xff1a; 其实我们日常就经常使用到该结构中的各个部分&#xff1a; 输入单元&#xff1a;包括键盘, 鼠标&#xff0c;扫描仪等。 输出单元&#xff1a;显示器&#xff0c;…

粒子群算法优化RBF神经网络气体浓度预测

目录 完整代码和数据下载链接:粒子群算法优化RBF神经网络气体浓度预测,pso-rbf气体浓度预测(代码完整,数据齐全)资源-CSDN文库 https://download.csdn.net/download/abc991835105/88937920 RBF的详细原理 RBF的定义 RBF理论 易错及常见问题 RBF应用实例,粒子群算法优化R…

后勤管理系统|基于SSM 框架+vue+ Mysql+Java+B/S架构技术的后勤管理系统设计与实现(可运行源码+数据库+设计文档+部署说明+视频演示)

目录 文末获取源码 前台首页功能 员工注册、员工登录 个人中心 公寓信息 员工功能模块 员工积分管理 管理员登录 ​编辑管理员功能模块 个人信息 ​编辑员工管理 公寓户型管理 ​编辑公寓信息管理 系统结构设计 数据库设计 luwen参考 概述 源码获取 文末获取源…

Docker基础教程 - 12 常用容器部署-Nginx

更好的阅读体验&#xff1a;点这里 &#xff08; www.doubibiji.com &#xff09; 12 常用容器部署-Nginx 下面介绍一下常用容器的部署。可以先简单了解下&#xff0c;用到再来详细查看。 在 Docker 中部署 Nginx&#xff0c;并通过挂载方式将 Nginx 的配置文件和站点目录挂…

python 字典 集合 基础内容

‘’‘1. 字典的长度是多少 2. 请修改’java’ 这个key对应的value值为98 3. 删除 c 这个key 4. 增加—个key-value对, key值为 php, value是90 5. 获取所有的key值,存储在列表里 6. 获取所有的value值,存储在列表里 7. 判断 javascript 是否在字典中 8. 获得字典里所有value 的…