【数据结构】树的定义

ops/2025/1/11 14:46:27/

在计算机科学中,树(Tree)是一种重要的基础数据结构,广泛应用于许多领域,如文件系统的目录结构、数据库的索引、编译器的语法树、人工智能的决策树等。理解树的基本概念和术语,对于学习计算机科学及其相关技术具有重要的意义。本篇博客将通过清晰的定义和图示,带领大家逐步了解树的基础知识,适合初学者进行学习和掌握。

文章目录

    • 什么是树?
      • 基本定义
      • 空树与非空树
      • 树的表示
    • 树的常见术语
      • 节点(Node)
      • 根节点(Root Node)
      • 父节点和子节点(Parent and Child)
      • 兄弟节点(Sibling)
      • 叶子节点(Leaf Node)
      • 度(Degree)
      • 深度(Depth)
      • 高度(Height)
      • 层次(Level)
      • 树的高度
    • 树的类型
      • 有序树与无序树
      • 二叉树(Binary Tree)
      • 完全二叉树(Complete Binary Tree)
      • 平衡二叉树(Balanced Binary Tree)
      • 搜索树(Search Tree)
      • AVL树和红黑树
    • 森林
    • 树的操作
    • 小结

在这里插入图片描述

什么是树?

基本定义

树是一种非线性的数据结构,它由若干节点和连接这些节点的边构成。树的特点是层次性,即每个节点与其子节点之间有明确的父子关系。树的每个节点可以有多个子节点,但只能有一个父节点。树结构具有递归性质:树的子树本身仍然是树。树具有许多重要的应用,比如表示层次关系、组织数据结构、实现高效的查找等。

空树与非空树

树的概念也包括空树。空树是指没有任何节点的树,节点数为0,通常我们不关心空树的结构。在计算机中,空树可以作为递归算法的基准条件,即当树为空时,递归停止。

对于非空树来说,它总是有且仅有一个根节点。根节点是树的最上层节点,所有其他节点都可以通过根节点间接访问到。

树的表示

树的结构通常由节点和边来表示。每个节点包含一个数据元素(值),并通过边与其他节点连接。树的根节点是整个树的起始点,而树的其他节点通过边与根节点或其他节点相连,形成一个层次结构。

在这里插入图片描述

树的常见术语

节点(Node)

树的每个元素都叫做一个节点。节点包含两部分内容:数据(值)和指向子节点的指针。树的节点是构建整个树的基本单元。

根节点(Root Node)

根节点是树的起始节点,树的所有其他节点都可以通过根节点访问。树中只有一个根节点,因此根节点是唯一的。对于每棵树来说,根节点的层次是0。

父节点和子节点(Parent and Child)

在树中,节点之间通过边进行连接,节点间的关系是父子关系。假设节点A通过一条边连接到节点B,那么节点A就是节点B的父节点,节点B则是节点A的子节点。每个节点最多只有一个父节点,但可以有多个子节点。

兄弟节点(Sibling)

在树中,具有相同父节点的节点被称为兄弟节点。例如,如果节点A和节点B有相同的父节点P,那么A和B就是兄弟节点。

叶子节点(Leaf Node)

叶子节点是没有子节点的节点,度为0。它是树的最底层节点,通常出现在树的末端。叶子节点在树的遍历中通常是访问的终点。

度(Degree)

节点的度是指该节点所拥有的子节点的数量。度可以用来描述树结构的“宽度”,即一个节点可以有多少个分支。例如,度为0的节点是叶子节点,而度大于0的节点则是分支节点。

树的度通常是指所有节点中度的最大值。换句话说,树的度就是树中最“宽”节点的度。

深度(Depth)

节点的深度是指从根节点到该节点的路径上的边的数量。根节点的深度为0,而根节点的直接子节点的深度为1,依此类推。深度反映了节点距离树根的远近。

高度(Height)

节点的高度是指从该节点到树的最远叶子节点的路径上的边的数量。换句话说,节点的高度是从该节点开始,经过多少层的子节点才能到达叶子节点。树的高度是树中所有节点高度的最大值,通常是树的最深层次。

层次(Level)

节点的层次即深度,表示从根节点开始的第几层。根节点是第一层,其子节点是第二层,以此类推。层次有助于表示树的结构层次感。

树的高度

树的高度是指树中根节点到最远叶子节点的最长路径上边的数量。树的高度等于树中节点的最大深度。树的高度通常用来描述树的深度,影响树的遍历和操作效率。

在这里插入图片描述

树的类型

我们先简单了解一下常见树的类型,对于重要的树结构和特性我们会在后期逐步介绍,敬请关注。

有序树与无序树

树可以分为有序树和无序树。不同之处在于子节点的顺序是否重要:

  • 有序树:有序树中的子节点顺序是固定的,不能随意改变。换句话说,在有序树中,节点的排列顺序是有意义的。常见的应用如表达式树,其中操作数和操作符的顺序是必须严格保持的。
  • 无序树:无序树中的子节点顺序不重要,节点可以自由交换位置。无序树适用于那些对子节点顺序没有特定要求的场景,如文件系统中的目录树。

二叉树(Binary Tree)

二叉树是一种特殊的树,每个节点最多有两个子节点,通常分别称为左子节点和右子节点。二叉树在许多算法和数据结构中有广泛应用,比如二叉查找树、堆、平衡二叉树等。

完全二叉树(Complete Binary Tree)

完全二叉树是指一棵二叉树,除了最后一层外,每一层的节点数都达到最大值,且最后一层的节点尽可能集中在左边。完全二叉树是一种非常平衡的二叉树结构。

平衡二叉树(Balanced Binary Tree)

平衡二叉树是一种特殊的二叉树,它满足以下条件:任何节点的左子树和右子树的高度差不超过1。平衡二叉树常用于保持高效的查找、插入和删除操作,如AVL树和红黑树。

搜索树(Search Tree)

搜索树,尤其是二叉搜索树(BST),是一种特殊的二叉树,它满足以下条件:对于树中的每个节点,左子树的所有节点的值小于该节点的值,右子树的所有节点的值大于该节点的值。这使得二叉搜索树能够高效地进行查找、插入和删除操作。

AVL树和红黑树

AVL树和红黑树都是自平衡二叉搜索树的实现。它们通过一些旋转操作来保持树的平衡性,从而保证在最坏情况下依然能提供对数时间复杂度的查找、插入和删除操作。

森林

所谓森林就说由m棵不相交的树的集合,树可以为空树,所以森林也是可以为空森林(如图所示)。

在这里插入图片描述

树的操作

树的操作包括节点的插入、删除、查找、遍历等。以下是常见的几种操作:

  • 插入操作:向树中插入一个新节点。在二叉搜索树中,插入操作需要根据节点值的大小来决定插入的位置。
  • 删除操作:删除树中的一个节点。删除操作通常较为复杂,特别是在树中间节点删除时,需要重新调整树的结构。
  • 查找操作:查找树中的某个节点或值。查找操作通常利用树的层次结构进行优化,如在二叉搜索树中,查找过程可以通过比较节点值的大小,快速定位目标节点。
  • 遍历操作:遍历树是指按照一定的顺序访问树中的每个节点。常见的遍历方式有:先序遍历、中序遍历、后序遍历和层次遍历(重点内容,后期逐步介绍)。

小结

树是一种非常重要的基础数据结构,广泛应用于各个计算机领域。。树不仅是算法设计中不可或缺的工具,还是很多实际问题解决中的关键数据结构。我们后续会不断更新数据结构相关的内容,感兴趣的化可以给我点点关注支持支持。


http://www.ppmy.cn/ops/149181.html

相关文章

排序:插入、选择、交换、归并排序

排序 :所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性 :假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,…

51c~Pytorch~合集4

我自己的原文哦~ https://blog.51cto.com/whaosoft/12311033 一、Pytorch~训练-使用 这里介绍了Pytorch中已经训练好的模型如何使用 Pytorch中提供了很多已经在ImageNet数据集上训练好的模型了,可以直接被加载到模型中进行预测任务。预训练模型存放在Pytorch的…

年度技术突破奖|中兴微电子引领汽车芯片新变革

随着以中央计算区域控制为代表的新一代整车电子架构逐步成为行业主流,车企在电动化与智能化之后,正迎来以架构创新为核心的新一轮技术竞争。中央计算SoC,作为支撑智驾和智舱高算力需求的核心组件,已成为汽车电子市场的重要新增量。…

【MySQL】ON与WHERE的区别(临时表)

先说区别后举例 核心概念:临时表 “临时表”,这是理解 JOIN 操作的关键。数据库在执行 JOIN 时,确实会生成一个中间的、逻辑上的结果集(你可以把它想象成一个临时表),然后在这个结果集上进行后续操作。性能…

蓝笔科技 | 超凡妈妈赋能计划-【北大生涯规划师特别企划】

12月27日,“超凡妈妈赋能计划-北大生涯规划师特别企划”在广州正式启动,据了解,本次超凡妈妈赋能计划是由广州蓝笔科技信息有限公司牵头发起并主办,中国关心下一代健康体育基金会作为公益支持单位,北京大学作为项目技术…

【Docker】Dockerfile ENV环境变量传递问题

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、直接说结论二、怎么解决这个问题方案1. 不使用多级嵌套的变量方案2. 使用 bash 在启动时动态解析环境变量 前言 这两天在给生产环境部署skywalking链路监控…

elasticsearch常见故障汇总

es的入库突然出现异常,大量超时 查看集群状态,状态为红色 GET _cluster/health 具体查看,实体,看看是那些索引状态异常,看到wb_info_2025-01-08索引状态异常 GET _cat/indices?v 注:其他上面的步骤可以在…

第四、五章图论和网络爬虫+网络搜索

第四章 图论和网络爬虫 4.1 构建网络爬虫工程重点 构建网络爬虫的重点 用BFS还是DFS 在不考虑时间的情况下,这两种不同的搜索方法都可以在相同的时间下爬下整个静态的互联网内容,但是在现实中肯定是需要考虑时间以及互联网动态变化的。所以重点应该是如…