数据结构小知识2:树

news2025/1/18 18:12:00

一、什么是树

数据结构中的树是一种非常重要的非线性数据结构。它由节点(Node)和边(Edge)组成,用于表示具有层次关系的数据。
在这里插入图片描述

1.1、树的基本概念

  1. 节点(Node):
    • 树的基本单位,每个节点包含一个值(或称为键)和若干子节点的引用。
    • 根节点(Root Node):树的顶点,没有父节点。
    • 叶节点(Leaf Node):没有子节点的节点。
  2. 边(Edge):
    • 节点之间的连接,表示节点之间的关系。
  3. 子节点(Child Node)和父节点(Parent Node):
    • 子节点是直接连接在某个节点下的节点。
    • 父节点是直接连接某个节点上的节点。
  4. 深度(Depth):
    • 节点的深度是从根节点到该节点的边的数量。
  5. 高度(Height):
    • 节点的高度是从该节点到叶节点的最长路径的边的数量。
    • 树的高度是根节点的高度。
  6. 度(Degree):
    • 节点的度是其子节点的数量。
    • 树的度是所有节点中最大的度。
      在这里插入图片描述

问题1:对于度为m的树,与m叉树有什么区别?

  • 答:
    树的度就最大节点的度,节点的度就是节点有多少个孩子节点,度为m的树,其至少有一个节点的孩子数量为m。
    而m叉树不同,m叉树是我们规定其子节点最多为3个,实际上并不要求其一定为3个,它不仅可以不为3,实际上他没有节点,是个空树都可以。
    在这里插入图片描述

1.2、树的分类

  1. 二叉树:

    • 每个节点最多有两个子节点,分别称为左子节点和右子节点。
    • 在这里插入图片描述
  2. 完全二叉树:

    • 除了最后一层,其他每一层的节点都是满的,最后一层的节点从左到右排列。
    • 在这里插入图片描述
  3. 满二叉树:

    • 每个节点要么是叶节点,要么有两个子节点。
    • 在这里插入图片描述
  4. 平衡二叉树:

    • 任意节点的两个子树的高度差不超过1。例如:AVL树、红黑树。
    • 在这里插入图片描述
  5. 二叉搜索树:

    • 对于每个节点,左子树上所有节点的值小于该节点的值,右子树上所有节点的值大于该节点的值。
    • 在这里插入图片描述
  6. 多叉树(Multi-way Tree):

    • 每个节点可以有多于两个的子节点。

二、二叉树

2.1、二叉树的基本知识

二叉树是一种每个节点最多有两个子节点的树形数据结构。他一般有五种状态。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这其中对我们最为有帮助的就是二叉查找树。

2.2、二叉查找树

在这里插入图片描述
通过上图我们可以看到,在二叉查找树中,任意节点中,左节点一定小于父节点,而右节点一定大于父节点。而通过根节点来看,根节点其左子树上元素统统小于根节点,相反右子树上所有元素都大于根节点。

2.3、遍历

二叉树有四种遍历方式:前序遍历中序遍历后序遍历层序遍历
在这里插入图片描述

2.3.1、前序遍历

从根结点开始,然后按照当前结点左子结点右子结点的顺序遍历。
在这里插入图片描述

其前序遍历顺序为:20、18、16、19、23、22、24

2.3.2、中序遍历

从最左边的子节点开始,然后按照左子结点当前结点右子结点的顺序遍历。
中序遍历是最重要的一种,其在平衡二叉树中遍历结果就是从小到大的。
在这里插入图片描述

其中序遍历顺序为:16、18、19、20、22、23、24

2.3.3、后序遍历

从最左边的子节点开始,然后按照左子结点右子结点当前结点的顺序遍历
在这里插入图片描述

其中序遍历顺序为:16、19、18、22、24、23、20

2.3.4、层序遍历

一层一层遍历
在这里插入图片描述

其中序遍历顺序为:20、18、23、16、19、22、24

三、平衡二叉树

3.1、平衡二叉树基本知识

思考一个问题,按照二叉树的规则,将7、10、11、12、13插入到一颗树中,其结构图如下:
在这里插入图片描述
是不是看着非常的难受?这右边太长了!!所以引出了平衡二叉树的概念。

平衡二叉树就任意节点左右子树高度相差不大于1。
在这里插入图片描述

在10节点,其左子树高度为0,右子树高度为3,不满足平衡二叉树。

在这里插入图片描述
这是一个标准的平衡二叉树。

3.2、平衡二叉树旋转知识

平衡二叉树的左右子树高度不超过1,极大地提高了查找的效率,那么如何保证其左右子树高度不超过1呢?
保证平衡二叉树的根本在于旋转,分为左旋右旋。但是不是每次插入都会触发旋转,只有打破了平衡二叉树才会进行旋转。
那么如何判断是左旋还是右旋呢?

当我们按照规则添加一个元素后打破了平衡树,此时我们向添加元素的父节点向上寻找,找到第一个不平衡的节点,作为支撑节点。如图
在这里插入图片描述
在添加了12后,平衡树被打破,此时寻找支点,父节点11还是平衡二叉树,向上寻找父节点10,发现10节点不为平衡二叉树,10就作为支点。
同时,10的右边比左边多,所以进行左旋
在这里插入图片描述

在来看一个左旋的例子

在这里插入图片描述
在这里插入图片描述

同理,右旋步骤与左旋相同。

四、红黑树

红黑树是一种特殊的二叉查找树,红黑树的每一个节点上都有存储位表示节点的颜色。每一个节点可以是红或者黑,红黑树不是高度平衡的,它的平衡是通过"红黑规则"进行实现的。
红黑规则:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

修改yarn、npm、pnpm为国内镜像源

国内由于网络的原因,使用官方的npm、yarn、pnpm访问下载依赖库会很慢,有时候还会出现无法访问的情况,这时候就需要我们给npm、yarn、pnpm换一个国内的镜像源的,一般的我们可以将镜像换成淘宝的源,由于平时比较常用到的…

《珊瑚岛》是一款什么类型的游戏 苹果电脑如何玩到《珊瑚岛》

在众多电子游戏中,有些游戏因其独特的游戏体验和丰富的内容而脱颖而出,《珊瑚岛》便是其中之一。在游戏中你将离开宝京前往珊瑚岛,种植农作物、饲养动物、和岛民成为朋友。您不仅可以振兴该岛小镇,还可以保护和修复周围的珊瑚礁。…

Part 8.2 最短路问题

很多题目都可以转化为最短路的模型。因此&#xff0c;掌握最短路算法非常重要。 >最短路模板< 【模板】全源最短路&#xff08;Johnson&#xff09; 题目描述 给定一个包含 n n n 个结点和 m m m 条带权边的有向图&#xff0c;求所有点对间的最短路径长度&#xff…

流水账里的贷款密码:如何打造银行眼中的“好流水”

说到贷款&#xff0c;很多人可能都遇到过这样的困惑&#xff1a;明明觉得自己条件不错&#xff0c;为啥银行就是不给批呢&#xff1f;其实&#xff0c;银行在审批贷款时&#xff0c;除了看你的征信记录、收入证明这些基础材料外&#xff0c;还有一个很重要的参考指标&#xff0…

LinkedHashMap详解

目录 LinkedHashMap详解1、LinkedHashMap的继承体系2、LinkedHashMap的特性介绍和代码示例①、特性②、适用场景使用LinkedHashMap 实现最简单的 LRU缓存 3、LinkedHashMap的构造函数4、LinkedHashMap是如何存储元素的&#xff0c;底层数据结构是什么&#xff1f;LinkedHashMap…

JAVA复习3

目录 19. 下列关于 do…while 语句和 while 语句的叙述中错误的是&#xff08; C &#xff09; 20. 若有定义 int a9, b6; System.out.println(a > b) 的结果是&#xff08; D &#xff09; 21. 关于接口和抽象类&#xff0c;下列说法正确的是&#xff08;A&#xff09; …

C++并发之协程实例(三)(co_await)

目录 1 协程2 实例3 运行 1 协程 协程(Coroutines)是一个可以挂起执行以便稍后恢复的函数。协程是无堆栈的&#xff1a;它们通过返回到调用方来暂停执行&#xff0c;并且恢复执行所需的数据与堆栈分开存储。这允许异步执行的顺序代码&#xff08;例如&#xff0c;在没有显式回调…

Interleaving Retrieval with Chain-of-Thought Reasoning for ... 论文阅读

Interleaving Retrieval with Chain-of-Thought Reasoning for Knowledge-Intensive Multi-Step Questions 论文阅读 文章目录 Interleaving Retrieval with Chain-of-Thought Reasoning for Knowledge-Intensive Multi-Step Questions 论文阅读 Abstract介绍相关工作开放域QA提…

Python+Pytest+Yaml+Request+Allure接口自动化测试框架详解

PythonPytestYamlAllure整体框架目录&#xff08;源代码请等下篇&#xff09; 框架详解 common:公共方法包 –get_path.py:获取文件路径方法 –logger_util.py:输出日志方法 –parameters_until.py&#xff1a;传参方式方法封装 –requests_util.py&#xff1a;请求方式方法封…

Cadence 16.6与17.4个人学习版推荐

一. 简介与下载 Cadence个人学习版是基于Cadence官方发行的安装包做了适当精简和优化的二次打包版本&#xff0c;包括了Cpature原理图设计、PSpice 电路仿真以及Allegro PCB设计等以电子产品设计为主的主要功能&#xff0c;能满足绝大部分硬件工程师的使用需求。 学习版预先已…

我国人工智能核心产业规模近6000亿元

以下文章来源&#xff1a;中国证券报 2024世界智能产业博览会6月20日至6月23日在天津举行。会上发布的《中国新一代人工智能科技产业发展报告2024》显示&#xff0c;我国人工智能企业数量已经超过4000家&#xff0c;人工智能已成为新一轮科技革命和产业变革的重要驱动力量和战略…

stm32学习笔记---OLED调试工具(理论部分和代码部分)

目录 理论部分 三种常用的程序调试方法 第一种是串口调试 第二种是显示屏调试 第三种是Keil调试模式 其他调试方式 OLED显示屏的介绍 OLED的硬件电路 OLED驱动程序中所包含的驱动函数 OLED_Init(); OLED_Clear(); OLED的显示函数 OLED_ShowChar(1, 1, A); OLED_S…

【SSM】

Spring常见面试题总结 Spring 基础 什么是 Spring 框架? Spring 是一款开源的轻量级 Java 开发框架&#xff0c;旨在提高开发人员的开发效率以及系统的可维护性。 我们一般说 Spring 框架指的都是 Spring Framework&#xff0c;它是很多模块的集合&#xff0c;使用这些模块…

海洋生物识别系统+图像识别+Python+人工智能课设+深度学习+卷积神经网络算法+TensorFlow

一、介绍 海洋生物识别系统。以Python作为主要编程语言&#xff0c;通过TensorFlow搭建ResNet50卷积神经网络算法&#xff0c;通过对22种常见的海洋生物&#xff08;‘蛤蜊’, ‘珊瑚’, ‘螃蟹’, ‘海豚’, ‘鳗鱼’, ‘水母’, ‘龙虾’, ‘海蛞蝓’, ‘章鱼’, ‘水獭’, …

计算机系统基础实训五—CacheLab实验

实验目的与要求 1、让学生更好地应用程序性能的优化方法&#xff1b; 2、让学生更好地理解存储器层次结构在程序运行过程中所起的重要作用&#xff1b; 3、让学生更好地理解高速缓存对程序性能的影响&#xff1b; 实验原理与内容 本实验将帮助您了解缓存对C程序性能的影响…

地推利器Xinstall:全方位二维码统计,打造高效地推策略,轻松掌握市场脉搏!

在移动互联网时代&#xff0c;地推作为一种传统的推广方式&#xff0c;依然占据着重要的地位。然而&#xff0c;随着市场竞争的加剧&#xff0c;地推也面临着诸多挑战&#xff0c;如如何有效监测下载来源、解决填码和人工登记的繁琐、避免重复打包和iOS限制、以及如何准确考核推…

安装vue时候发现npm淘宝镜像不能使用,报出:npm.taobao.org和registry.npm.taobao.or

2024.3.12 安装vue时候发现npm淘宝镜像不能使用&#xff0c;需要重新更换源&#xff0c;简单来说就是更换镜像 使用 npm config get registry 查看当前的镜像&#xff1b; npm config get registry 使用npm config set registry http://mirrors.cloud.tencent.com/npm/ &…

嵌入式实验---实验五 串口数据接收实验

一、实验目的 1、掌握STM32F103串口数据接收程序设计流程&#xff1b; 2、熟悉STM32固件库的基本使用。 二、实验原理 1、STM32F103R6能通过查询中断方式接收数据&#xff0c;每接收到一个字节&#xff0c;立即向对方发送一个相同内容的字节&#xff0c;并把该字节的十六进…

见证数据的视觉奇迹——DataV Atlas

引言 前段时间一直沉迷于AI方向&#xff0c;几乎很久没碰大数据开发的相关内容了&#xff0c;今天突然看到阿里活动又推出DataV的体验了&#xff0c;我直接“啪”的一下就点进来了&#xff0c;很快啊&#xff01;本来之前开发数字孪生的时候就接触过基础的DataV操作了&#x…

Monica

在 《long long ago》中&#xff0c;我论述了on是一个刚出生的孩子的脐带连接在其肚子g上的形象&#xff0c;脐带就是long的字母l和字母n&#xff0c;l表脐带很长&#xff0c;n表脐带曲转冗余和连接之性&#xff0c;on表一&#xff0c;是孩子刚诞生的意思&#xff0c;o是身体&a…