数据结构之<树>的介绍

树的基本概念

在数据结构中,树(Tree)是一种层次结构,由节点和边组成。树的基本概念包括根节点、子节点、父节点、兄弟节点等。节点拥有零个或多个子节点,除了根节点外,每个节点有且仅有一个父节点。树的层数称为树的高度。子节点以及它后续节点所形成的数称为子树。

1.二叉树(Binary Tree)

二叉树是一种特殊的树结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。
二叉树
二叉树的基本概念:

  1. 节点(Node): 二叉树的基本构建单元,包含数据元素以及指向左右子节点的指针。

  2. 根节点(Root): 树的顶端节点,没有父节点。

  3. 叶子节点(Leaf): 没有子节点的节点称为叶子节点。

  4. 父节点、子节点、兄弟节点: 一个节点的直接上级是其父节点,直接下级是其子节点。具有相同父节点的节点互为兄弟节点。

  5. 深度(Depth): 节点的深度是从根节点到该节点的路径长度,根节点的深度为0。

  6. 高度(Height): 节点的高度是从该节点到其最远叶子节点的路径长度,叶子节点的高度为0。

二叉树有以下几种特殊形态:

1.1完全二叉树(Complete Binary Tree)

除了最后一层外,其他层的节点都是满的,且最后一层的节点从左到右连续排列。最后一层空缺的节点必须在右边,左边必须填满。
在这里插入图片描述

1.2满二叉树(Full Binary Tree)

每个节点要么没有子节点,要么有两个子节点。
在这里插入图片描述

1.3完美二叉树(Perfect Binary Tree)

所有叶子节点都在同一层,且每个非叶子节点都有两个子节点。
在这里插入图片描述

2.平衡二叉树(Balanced Binary Tree)

平衡二叉树是一种特殊的二叉树,它的左子树和右子树的高度差不超过1。常见的平衡二叉树有AVL树和红黑树。
在这里插入图片描述

3.二叉搜索树(Binary Search Tree)

二叉搜索树是一种有序的二叉树,对于每个节点,其左子树的值都小于该节点的值,右子树的值都大于该节点的值。这种特性使得在二叉搜索树中进行查找、插入和删除操作非常高效。
在这里插入图片描述

4.自平衡二叉搜索树

自平衡二叉搜索树是一种特殊的二叉搜索树,它在插入或删除节点时会自动调整树的结构,以保持树的平衡性。常见的自平衡二叉搜索树有红黑树和AVL树。

  • AVL树(AVL Tree):
    在这里插入图片描述

AVL树是一种高度平衡的二叉搜索树,它的每个节点都有一个平衡因子(Balance Factor),表示其左子树高度和右子树高度之差。AVL树满足以下性质:

  1. 每个节点的平衡因子只能是-1、0或1。
  2. 对于每个节点,其左子树和右子树的高度差的绝对值不超过1。

AVL树通过对节点进行旋转操作来保持树的平衡性。当插入或删除节点后,如果破坏了平衡性,AVL树会进行旋转操作来调整节点的位置,使得树重新平衡。相比于红黑树,AVL树的平衡性更加严格,因此在某些场景下,AVL树的查询效率可能更高。

  • 红黑树(Red-Black Tree):
    在这里插入图片描述

红黑树是一种具有自平衡性质的二叉搜索树。它的每个节点都有一个颜色属性,可以是红色或黑色。红黑树满足以下几个性质:

  1. 每个节点要么是红色,要么是黑色。
  2. 根节点是黑色。
  3. 每个叶子节点(NIL节点,空节点)是黑色。
  4. 如果一个节点是红色,则它的两个子节点都是黑色。
  5. 对于每个节点,从该节点到其所有后代叶子节点的简单路径上,均包含相同数量的黑色节点。

通过这些性质,红黑树可以保持树的平衡,使得树的高度相对较小,从而提高了查找、插入和删除操作的效率。红黑树的插入和删除操作可能需要进行旋转和颜色调整来保持平衡性。

一般来说,红黑树适用于插入和删除操作较多的场景,而AVL树适用于对查询操作有更高要求的场景。

二叉树的应用:

  1. 搜索和排序: 二叉搜索树可以用于快速搜索和排序。

  2. 表达式树: 二叉树可以用于表示数学表达式,便于求值和转换。

  3. 文件系统: 文件系统中的目录结构通常可以用二叉树表示。

  4. 哈夫曼树: 用于数据压缩算法中,构建最优编码树。

  5. 数据库索引: 数据库中的索引通常使用二叉树结构。

5.三叉树(Ternary Tree)

三叉树是一种每个节点最多有三个子节点的树结构。它可以用于表示多叉树的一种特殊情况。
在这里插入图片描述

6.多叉树(Multiway Tree)

多叉树是一种每个节点可以有多个子节点的树结构。每个节点的子节点数量可以是任意的。
在这里插入图片描述


图片来源:峰华前端工程师

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构-猴子吃桃问题

一、需求分析 有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。用多种方法实现求出原来这群猴子共摘了多少个桃子。要求: 1)采用数组数据结构实现上述求解; 2)采用链数据结构实现上述…

13、Kafka副本机制详解

Kafka 副本机制详解 1、副本定义2、副本角色3、In-sync Replicas(ISR)4、Unclean 领导者选举(Unclean Leader Election) 所谓的副本机制(Replication),也可以称之为备份机制,通常是指…

离线编译安装opencv库及多版本切换[ubuntu]

系统版本:ubuntu18.04 库版本:opencv4.6.0 & opencv3.6.0 一、多版本安装前准备 1. 卸载已经安装的opencv版本[可选] 1.1 卸载从软件仓库中安装的opencv sudo apt-get purge libopencv* 1.2 卸载使用source自行编译安装的opencv 首先进入原先编译…

人生感悟 | 又是一年,眼看要2024了

哈喽,你好啊,我是雷工! 刚过完大雪节气没两天,气温开始急转直下,走在路上明显感觉冷了许多。看天气预报很多地区已经开始下雪了。 看日历已经12月9号了,12月份,一年的最后一个月,2…

自然语言处理阅读第二弹

HuggingFace 镜像网站模型库 NLP中的自回归模型和自编码模型 自回归:根据上文内容预测下一个可能的单词,或者根据下文预测上一个可能的单词。只能利用上文或者下文的信息,不能同时利用上文和下文的信息。自编码:对输入的句子随…

【TB作品】STM32 PWM之实现呼吸灯,STM32F103RCT6,晨启

文章目录 完整工程参考资料实验过程 实验任务: 1:实现PWM呼吸灯,定时器产生PWM,控制实验板上的LED灯亮灭; 2:通过任意两个按键切换PWM呼吸灯输出到两个不同的LED灯,实现亮灭效果; 3&…

FRP 内网穿透工具部署

FRP 介绍 frp 是一个专注于内网穿透的高性能反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。 官方网站:https://gofrp.org/zh-cn/ 项目地…

ARS430毫米波雷达标定步骤

工具准备:CANoe, 标定工程文件,雷达标定板,三脚架,激光器,平口钳,气泡水平仪,小镜子,双面胶。 将车辆放置在车辆前方至少有20米空白视野的场地上。使用气泡水平仪大概使…

谈一谈网络协议中的传输层

文章目录 UDPTCPTCP为什么可靠 UDP 传输层的作用是负责能够从发送端到传输端。 我们的主机上有多个程序,那么怎么分辨哪个信息是发给哪个程序的呢?—端口号。其是一个16位的无符号整型,端口号分为知名端口号(0-1023)和…

基于YOLOv8深度学习的路面标志线检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

使用sha512对上传到linux服务器的文件进行校验

什么是SHA-512 SHA-512(安全散列算法 512 位)是一种密码散列函数,属于SHA-2家族的一部分。它是由美国国家安全局(NSA)设计的一种安全散列算法,用于产生数字摘要,通常用于数据完整性验证、数字签…

3D角色生成式AI:原理及实现

自从开创性论文Denoising Diffusion Probabilistic Models发布以来,此类图像生成器一直在改进,生成的图像质量在多个指标上都击败了 GAN,并且与真实图像无法区分。 NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis…

《点云处理》 提取点云内点和外点

前言 关于内点(inliers)和外点(outliers)在点云处理方向上是个非常常见的名词。有时候,内点也会被称之为有效点,而外点会被称之为无效点。所谓有效和无效都是相对而言的,无效不一定是真的没有意…

拖拽属性 draggable

H5 新增的属性 draggable,它能够给与一切的 html 元素拖动的效果。 拖拽元素 属性为 draggable"true" 的元素,可拖动,且拖动时鼠标变为禁用图标 ps: 直接写 draggable 可能无效 ondragstart 开始拖拽时触发(按下鼠标…

【SpringMVC】SpringMVC简介、过程分析、bean的加载和控制

文章目录 1. SpringMVC简介2. SpringMVC入门案例文件结构第一步:坐标导入第二步:创建SpringMVC容器的控制器类第三步:初始化SpringMVC环境,设定Spring加载对应的bean第四步:初始化Servlet容器,加载SpringMV…

PyQt6 QScrollBar滚动条控件

锋哥原创的PyQt6视频教程: 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计48条视频,包括:2024版 PyQt6 Python桌面开发 视频教程(无废话版…

实验记录:可能造成深度学习模型训练过程中准确率振荡的原因

可能造成模型训练过程中准确率振荡的原因: 数据集因素: 1.数据集中含有噪声或者样本分布不平衡,这会导致模型学习到一些错误的规律,从而引起训练准确率的震荡。 2.训练数据量过小。如果训练数据集过小,会导致样本不足…

Y4M视频文件格式

什么是Y4M 以YUV4Mpeg格式创建的视频文件;这个视频文件存储了一组未压缩的YCbCr图像,这些图像逐帧组成视频;在压缩成MPEG-2或Matroska等更流行的视频格式之前,用作原始的彩色视频格式 Y4M文件是一个纯文本格式的header开始,header有0或多个…

ARM架构简析

全局与局量等知识 断电后,程序以及数据都在FLASH中。 断电后,内存中就没有变量了。 程序在烧在FLASH中的; 程序运行的时候,全局变量的初始值,必然是从FLAASH中的来的: 初始化全局变量的过程:…

B01、JVM与Java体系结构-01

字节码与多语言混合编程 字节码概述: 我们平时说的java字节码,指的是用java语言编译成的字节码。准确的说任何能在jvm平台上执行的字节码格式都是一样的。所以应该统称为:jvm字节码。不同的编译器,可以编译出相同的字节码文件&…