数据结构中的一棵树

一、树是什么?

有根有枝叶便是树!根只有一个,枝叶可以有,也可以没有,可以有一个,也可以有很多。

就像这样:
在这里插入图片描述

嗯,应该是这样:

在这里插入图片描述

二、一些概念

1、高度

树有多高,嗯,我一米八三!

树的高度怎么算?

高度是啥,就是从下往上到最顶端,从叶节点到根节点。

从每个叶节点开始,一个节点一个节点往上数,数到根节点,最长的那个数就是数的高度。叶节点起始为0.

上面这个树的高度是4。

在这里插入图片描述

2、深度

深度,顾名思义,就是从上往下到最低端,从根节点到叶节点。

从根开始,一个节点一个节点往下数,数到每个叶子节点,最长的那个数就是数的深度。根节点的起始为0.

上面这个树的深度是4。

在这里插入图片描述

对比上面的高度,看到了哈,数值是一样的,

3、层

一层是什么呢。就是横向的同一高度的所有节点凑一块儿就是一层。

像下面一条线连接了第二层所有的节点:

在这里插入图片描述

三、二叉树的遍历

二叉树是什么?

二叉树就是每个节点最多有两个分叉子节点。

遍历是什么意思?

遍历就是一个树的所有节点都点一遍,那么既然要点一遍,总归要遵循一个特定的顺序,不然,乱来的话总会可能漏一个,或者多一个。

像下面这棵树:

在这里插入图片描述

1、前序遍历

顺序:中左右

中 6 -> 左中 5 -> 左 2 -> 右 3 -> 右中 7 -> 右 8

结果就是:6、5、2、3、7、8。

2、中序遍历

顺序:左中右

左 2 -> 中 5 -> 右 3 -> 中 6 -> 右中 7 -> 右 8

结果就是: 2、5、3、6、7、8。

3、后序遍历

顺序:左右中

左 2 -> 右 3 -> 中左 5 -> 右 8 -> 中右 7 -> 中 6

结果就是:2、3、5、8、7、6.

这个顺序,其实很容易混乱。想要记得牢,只需要一点:

【前、中、后】,前为左,右为后,哪个顺序遍历,那么哪个节点就会顺序居中,其它的节点,靠左的居前。

节点的巡查是从根节点出发,从上到下,从左至右巡查,每个节点及其子点巡查完毕后,再跳出到其它节点。

4、附加:层序遍历

层序遍历很简单就是从上到下,一层一层的收拢节点。

第一层 6 -> 第二层 5、7 -> 第三层 2、3、8

结果就是:6、5、7、2、3、8.

四、树能干什么?

树能盖房子!

没错,树通常用来搭建存储数据的房子。

数据存储是对数据的持久化保存,针对数据的操作包括读和写。不过,无论是读还是写,都离不开对数据的检索操作。

1、B树

之前文章介绍过B树及在数据库存储方面的应用:

你好,我是B树

MySQL InnoDB 是怎么使用 B+ 树存数据的?

B 树,即balance tree。其结构及节点数据分布遵循特定的规则。

B 树的算法运行时间通常由它所执行的【磁盘读写操作次数】决定,所有一般会一次尽可能的读写更多的信息。一个B树节点通常和一个完整的磁盘页大小相同,所以磁盘页的大小限制了一个B树节点所能包含孩子节点的个数。

B 树每个节点会包含多少个分支,称之为分支因子。分支因子越大,B 的高度越低,查找关键字所需的磁盘存取次数越少,查询时间越短。这也是为什么会推崇使用B树结构来作为数据底层存储。

2、二叉搜索树

二叉搜索树是以一棵二叉树来组织数据存储,每个节点除了包含数据本身外,还包括指向左节点、右节点及父节点的指针,即key、left、right、p。其中存储数据需满足左中右非降序存储,即left.key <= key <= right.key。

左中右,是不是很熟悉,就是我们上面讲到过的【中序遍历】顺序。【中序遍历】输出的话,整个数列会是非降序排序数列。

搜索树结构通常支持包括查找,最大值,最小值,插入,删除等操作。嗯,这些操作是不是又很熟悉,总之就是一个【日常操作】。

二叉搜索树上的操作时间和它的高度成正比,对于n节点二叉树,通常最坏运行时间为O(lgn)(为什么是O(lgn)呢?这个需要推导,先记住就行了),这个就是树元素随机分步的情况下的结果。极端情况下,一条链从根到叶的话,时间固定就是O(n)了。就像下面这个棵树:

在这里插入图片描述

3、红黑树

红黑树也是一个二叉搜索树。那为什么会需要这么一棵树呢?

就是为了避免上面哪种极端或者接近极端情况的出现。它可以【保证最坏的情况下操作时间复杂度为O(lgn)】。

对的,是保证!那怎么保证呢?当然是通过维持红黑树本身的结构特点来实现。

我们上面及到过二叉搜索树节点包含的数据,红黑树会在其基础上增加一个存储位来表示节点的颜色(红或者黑)。通过【对任何一条从根到叶子节点的简单路径上的各个节点颜色进行约束】来确保【没有一路径会比其它路径长2倍】。

红黑树的特点:

  • a)【节点要么红,要么黑】

  • b)【根节点是黑的】

  • c)【叶节点是黑的】

  • d)【如果一个节点是红色的,那么它的子节点是黑色的】

  • e)【对任何一个节点,从该节点到其所有后代叶节点的简单路径上的黑节点数据是相同的】

这里有个点需要强调一下,红黑树里所说的叶子节点指的是【外部节点】,也就是不包含 key 的节点。

黑高:从某个节点到达其叶节点的【任何一个(参考e】简单路径上的黑色节点个数称之为黑高。红黑树的黑高即为其根节点的黑高。

一颗有 n 个内部节点的红黑树的高度至多为 2lg(n+1),也即我们前面说的能够保证最坏的情况下操作时间复杂度为O(lgn)。

红黑树有哪些应用呢?

最常见的就是 HashMap了,用于解决存储元素哈希冲突,当链表元素个数超过8时,即转为红黑树。

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

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

相关文章

MySQL之导入导出远程备份(详细讲解)

文章目录 一、Navicat导入导出二、mysqldump命令导入导出2.1导出2.2导入&#xff08;使用mysqldump导入 包含t_log表的整个数据库&#xff09; 三、LOAD DATA INFILE命令导入导出3.1设置;3.2导出3.3导入(使用单表数据导入load data infile的方式) 四、远程备份4.1导出4.2导入 一…

Nacos_Linux上部署nacos

一. 准备工作 确保你的Linux服务器上已经安装了Java运行环境&#xff08;JRE&#xff09;&#xff0c;因为Nacos是基于Java开发的。下载Nacos的最新版本&#xff0c;你可以从Nacos的官方GitHub仓库下载。 选择合适的Linux服务器&#xff1a;确保你有一个运行稳定的Linux服务器…

redis系列:01 数据类型及操作

redis的数据类型有哪些 string,list,set,sorted_set,hash 操作 sting: set name maliao get name exists name expire name 5 ttl name del name setex name 10 maliao 设置key和过期时间 setnx name maliao 当key不存在时才添加list&#xff1a; lpush letter a lpush le…

【正点原子STM32连载】 第三十章 停止模式实验 摘自【正点原子】APM32E103最小系统板使用指南

1&#xff09;实验平台&#xff1a;正点原子APM32E103最小系统板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/docs/boards/xiaoxitongban 第三…

OpenCV-22高斯滤波

一、高斯函数的基础 要理解高斯滤波首先要直到什么是高斯函数&#xff0c;高斯函数是符合高斯分布的&#xff08;也叫正态分布&#xff09;的数据的概率密度函数。 高斯函数的特点是以x轴某一点&#xff08;这一点称为均值&#xff09;为对称轴&#xff0c;越靠近中心数据发生…

多节点 docker 部署 elastic 集群

参考 Install Elasticsearch with Docker Images 环境 docker # docker version Client: Docker Engine - CommunityVersion: 24.0.7API version: 1.43Go version: go1.20.10Git commit: afdd53bBuilt: Thu Oct 26 09:08:01 202…

深入理解Golang中的接口与实例展示

标题&#xff1a;深入理解Golang中的接口与实例展示 引言&#xff1a; Golang&#xff08;Go&#xff09;的接口是一项强大的特性&#xff0c;它为面向对象编程带来了灵活性和可维护性。本文将深入讲解Golang中的接口概念&#xff0c;从基础到实际应用&#xff0c;通过详细案例…

Unity种常见的更新函数

前言 在Unity中&#xff0c;有几个常用的更新函数&#xff0c;包括Update(), FixedUpdate(), LateUpdate()等。这些函数在游戏运行时会被自动调用&#xff0c;但它们的调用时机和使用场景有所不同。 Update() Update()是Unity中最常用的更新函数&#xff0c;它在每一帧都会被调…

【Linux实用篇】Linux常用命令(1)

目录 1.1 Linux命令初体验 1.1.1 常用命令演示 1.1.2 Linux命令使用技巧 1.1.3 Linux命令格式 1.2 文件目录操作命令 1.2.1 ls 1.2.2 cd 1.2.3 cat 1.2.4 more 1.2.5 tail 1.2.6 mkdir 1.2.7 rmdir 1.2.8 rm 1.1 Linux命令初体验 1.1.1 常用命令演示 在这一部分中…

遥感影像-语义分割数据集:Landsat8云数据集详细介绍及训练样本处理流程

原始数据集详情 简介&#xff1a;该云数据集包括RGB三通道的高分辨率图像&#xff0c;在全球不同区域的分辨率15米。这些图像采集自Lansat8的五种主要土地覆盖类型&#xff0c;即水、植被、湿地、城市、冰雪和贫瘠土地。 KeyValue卫星类型landsat8覆盖区域未知场景水、植被、…

uniapp中按钮点击跳转页面失效,纠正错误(亲测可用)

不知道伙伴你的错误和我是否一致&#xff1f; 我当时为了点击跳转按钮发现跳转不了&#xff0c;如下错误提示&#xff1a; worker.js?libNameWAAccelerateWorker.js:1 [Deprecation] SharedArrayBuffer will require cross-origin isolation as of M92, around July 2021. S…

华为机试真题实战应用【赛题代码篇】-找车位(附Java、python和C++代码)

目录 题目描述 解题思路 代码实现 C++ 代码2 python 代码2 Ja

【Java SE语法篇】6.数组

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ 文章目录 1.数组的基本概念1.1 为什么使用数组&#xff1f;1.…

MATLAB - 四旋翼飞行器动力学方程

系列文章目录 前言 本例演示了如何使用 Symbolic Math Toolbox™&#xff08;符号数学工具箱&#xff09;推导四旋翼飞行器的连续时间非线性模型。具体来说&#xff0c;本例讨论了 getQuadrotorDynamicsAndJacobian 脚本&#xff0c;该脚本可生成四旋翼状态函数及其雅各布函数…

streamlit中文开发手册(详细版)

目录 一、安装与配置 1.1 安装 Streamlit 1.2 配置文件 1.3 运行Streamlit应用 二、streamlit显示数据 2.1 显示标题 2.2 显示文本 2.3 显示代码段 2.4 通用显示方法 2.5 显示表格 2.6 显示JSON 2.7 显示pyplot图表 2.8 显示地图 2.9 显示图像 2.10 显示视频 三…

校验ChatGPT 4真实性的三个经典问题:提供免费测试网站快速区分 GPT3.5 与 GPT4

现在已经有很多 ChatGPT 的套壳网站&#xff0c;以下分享验明 GPT-4 真身的三个经典问题&#xff0c;帮助你快速区分套壳网站背后到底用的是 GPT-3.5 还是 GPT-4。 大家可以在这个网站测试&#xff1a;https://ai.hxkj.vip&#xff0c;免登录可以问三条&#xff0c;登录之后无限…

Android事件冲突原理及解决方法

Android事件冲突原理和解决方法 MotionEvent 事件类型事件分发流程onTouch 和 onClick 冲突down 事件分析冲突解决方法 MotionEvent 事件类型 ACTION_DOWN: 表示手指按下屏幕 ACTION_MOVE: 手指在屏幕上滑动时&#xff0c;会产生一系列的MOVE事件 ACTION_UP: 手指抬起&#xf…

Spring 注解 和SpringMVC注解

Spring和Spring MVC是两个紧密相关但又不同的框架&#xff0c;它们都使用一系列注解来简化开发。以下是Spring和Spring MVC中一些常用的注解&#xff1a; ### Spring 注解&#xff1a; 1. **Component&#xff1a;** - 用于将类标记为Spring容器中的组件&#xff0c;由Spr…

2024年腾讯云新用户专属优惠活动及代金券活动汇总

腾讯云作为国内领先的云计算服务提供商&#xff0c;一直致力于为用户提供优质、高效的服务。为了更好地满足新用户的需求&#xff0c;腾讯云在2024年推出了一系列新用户专属优惠活动和代金券活动。本文将为大家详细介绍这些活动&#xff0c;帮助大家更好地了解和利用这些优惠。…

Gogs - 管理协作者

Gogs - 管理协作者 References 仓库设置 管理协作者 权限设置 References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/