数据结构入门 — 树的概念与结构

本文属于数据结构专栏文章,适合数据结构入门者学习,涵盖数据结构基础的知识和内容体系,文章在介绍数据结构时会配合上动图演示,方便初学者在学习数据结构时理解和学习,了解数据结构系列专栏点击下方链接。


  • 博客主页:Duck Bro 博客主页
  • 系列专栏:数据结构专栏
  • 关注博主,后期持续更新系列文章
  • 如果有错误感谢请大家批评指出,及时修改
  • 感谢大家点赞👍收藏⭐评论✍

数据结构入门 — 树的概念与结构

本文关键字:数据结构、树、概念、结构


文章目录

  • 数据结构入门 — 树的概念与结构
    • 一、树的概念
    • 二、树的结构
    • 三、树的表示
    • 四、树在实际中的运用


一、树的概念

在这里插入图片描述

树是一种非线性数据结构,由若干个节点和它们之间的联系组成。 树具有如下特点:

  1. 树的第一个节点称为根节点,根节点下可以有若干个子节点,每个子节点下也可以有若干个子节点,以此类推。

  2. 节点之间的联系称为边,根节点没有父节点,其他节点的父节点是其直接上级,子节点是其直接下级。

  3. 每个节点可以有零个或多个子节点,但每个节点只有一个父节点。

  4. 树中节点的个数称为节点数或大小,从根节点到任意节点的路径上的边数称为深度或层数。

  5. 树可以为空树,即不包含任何节点。

树常用于表示层次结构,例如计算机科学中的文件系统、解析树、表达式树等。在算法中,树是许多高效的数据结构和算法的基础,例如搜索树、堆、红黑树、B树、哈夫曼树等。

注意:树形结构中,子树之间不能有交集,否则就不是树形结构
在这里插入图片描述


二、树的结构

在这里插入图片描述

概念说明举例
节点的度一个节点含有的子树的个数称为该节点的度如上图:A的为6
叶节点或终端节点度为0的节点称为叶节点如上图:B、C、H、I…等节点为叶节点
非终端节点或分支节点度不为0的节点如上图:D、E、F、G…等节点为分支节点
双亲节点或父节点若一个节点含有子节点,则这个节点称为其子节点的父节点如上图:A是B的父节点
孩子节点或子节点一个节点含有的子树的根节点称为该节点的子节点如上图:B是A的孩子节点
兄弟节点具有相同父节点的节点互称为兄弟节点如上图:B、C是兄弟节点
树的度一棵树中,最大的节点的度称为树的度如上图:树的度为6
节点的层次从根开始定义起,根为第1层,根的子节点为第2层,以此类推如上图:1、2、3、4
树的高度或深度树中节点的最大层次如上图:树的高度为4
堂兄弟节点双亲在同一层的节点互为堂兄弟如上图:H、I互为兄弟节点
节点的祖先从根到该节点所经分支上的所有节点如上图:A是所有节点的祖先
子孙以某节点为根的子树中任一节点都称为该节点的子孙如上图:所有节点都是A的子孙
森林由m(m>0)棵互不相交的树的集合称为森林

三、树的表示

树的常见表示方法有以下几种:

  1. 链式前向星表示法:这种方法是树的常见表示方法之一。使用链式前向星构造一个图,其中每个节点表示树中的一个节点,每条边表示节点之间的父子关系。这个方法可以方便地进行遍历操作。

  2. 双亲表示法:这种方法是使用一个数组来表示树,数组中每个元素表示树中的一个节点,其值为该节点的值,数组下标表示该节点的编号,而该节点在数组中对应的值表示其双亲节点的编号。这个方法可以方便地查找父节点。

  3. 孩子兄弟表示法:这种方法也是使用一个数组来表示树,数组中每个元素表示树中的一个节点,存储每个节点的第一个孩子节点的编号,由此可以找到该节点的所有孩子节点。这个方法可以方便地查找孩子节点。

  4. 邻接表表示法:这种方法是使用一个链表数组来表示树,数组中每个元素表示树中的一个节点,链表中存储该节点的所有孩子节点。这个方法可以方便地遍历孩子节点。

我们这里就简单的了解其中最常用的孩子兄弟表示法。

typedef int DataType;
struct Node
{struct Node* _firstChild1; // 第一个孩子结点struct Node* _pNextBrother; // 指向其下一个兄弟结点DataType _data; // 结点中的数据域
};

在这里插入图片描述


四、树在实际中的运用

树在实际中有很多应用,以下是一些常见的应用场景:

  1. 文件系统:文件系统通常使用树来组织文件和文件夹之间的关系。每个文件夹都可以包含子文件夹和文件,形成一棵树。

  2. 数据库:数据库中的索引通常采用树的数据结构来存储,以便快速查找和排序数据。

  3. 编译器:编译器通常使用抽象语法树(AST)来表示源代码,便于程序分析和优化。

  4. 网络协议:许多网络协议使用树来表示分层结构,例如TCP/IP协议中的网络层、传输层和应用层。

  5. 人工智能:人工智能中的决策树(Decision Tree)用于分类和预测,神经网络(Neural Network)也是一种树形结构。

  6. 算法:许多经典算法(如二叉搜索树、AVL树、红黑树)都使用树的数据结构,以提高算法效率。


在这里插入图片描述

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

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

相关文章

华为云云耀云服务器L实例评测|基于Docker环境快速部署Halo个人博客实操

目录 一、基本介绍 1.1 云耀云服务器L实例介绍 1.2 实操介绍 二、云耀云服务器的购买及基本使用 2.1 服务器购买流程 2.2 初始化连接流程 2.3 系统环境检查 三、Docker中运行Halo 3.1 Halo基本介绍 3.2 Docker的安装 3.3 使用 Docker 镜像创建容器 四、安装初始化H…

《Linux从练气到飞升》No.22 Linux 基础IO

🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的…

prize_p1

文章目录 解题过程代码审计思路问题解决数组绕过preg_match__destruct的触发修改phar文件以及签名phar://支持的后缀(其他方法) 题解方法一&#xff08;数组绕过&#xff09;方法二&#xff08;gzip绕过&#xff09; 解题过程 源代码 <META http-equiv"Content-Type&q…

谷歌翻译API接口,翻译API接口,翻译API接口申请指南

Google翻译API是一种可以在多个平台上使用的Web服务&#xff0c;通过使用该API&#xff0c;用户可以将任何文本转换成多种语言&#xff0c;同时也可以将多种语言转换成用户指定的语言。目前Google翻译API支持超过100种语言&#xff0c;涵盖了全球范围内的所有主流语言。 Googl…

Linux C 多线程

为什么会有线程? ————————>>>> 进程实现多任务的缺点&#xff1a; 进程间切换的计算机资源开销很大&#xff0c;切换效率非常低进程间数据共享的开销也很大 线程和进程的关系 线程是进程的一个执行单元&#xff0c;是进程内的调度实体。比进程…

在PHP8中对数组进行排序-PHP8知识详解

在php8中&#xff0c;提供了丰富的排序函数&#xff0c;可以对数组进行排序操作。常见的排序函数如下几个&#xff1a;sort() 函数、rsort() 函数、asort() 函数、arsort() 函数、ksort() 函数、krsort() 函数、natsort()函数和natcascsort()函数。 1、sort() 函数&#xff1a;…

从0到1学会Git(第三部分):Git的远程仓库链接与操作

写在前面:前面两篇文章我们已经学会了git如何在本地进行使用&#xff0c;这篇文章将讲解如何将本地的git仓库和云端的远程仓库链接起来并使用 为什么要使用远程仓库:因为我们需要拷贝我们的代码给别人以及进行协同开发&#xff0c;就需要有一个云端仓库进行代码的存储和同步&a…

【Java 基础篇】Java List 使用指南:深入解析列表操作

Java 是一门强大的编程语言&#xff0c;拥有丰富的数据结构和集合类&#xff0c;其中之一就是 List 列表。List 是 Java 集合框架中的一个重要接口&#xff0c;它允许我们以有序、可重复的方式存储一组元素。本篇博客将从基础到高级&#xff0c;详细介绍 Java 中的 List 接口以…

Qt配置使用MSVC编译器

Qt配置使用MSVC编译器_qt msvc-CSDN博客注意:Qt支持的MSVC就是2017和2015&#xff0c;所以vs也要下载2017&#xff0c;不要直接用最新的&#xff0c;安装路径都用默认的。程序运行失败时可以尝试windeployqt拷贝库文件到本地&#xff0c;然后有可能就能运行了。VS官网下载Visua…

苹果电脑Mac系统运行速度又卡又慢是怎么回事?

通常大家处理Mac运行速度慢的方法不是重启就是清空废纸篓&#xff0c;但是这两种方法对于Mac提速性能的效果是微之甚微的&#xff0c;想要彻底解决Mac运行速度慢&#xff0c;你应该试试一下三种方法~ 1、清理磁盘空间 硬盘空间过少是Mac运行变慢很大的一个因素&#xff0c;各…

反向动力学Ik学习

参考文章&#xff1a;&#xff08;非本人原创&#xff09; 英文原文&#xff1a;Inverse Kinematics Techniques in Computer Graphics: A Survey (andreasaristidou.com) 知乎翻译文章&#xff1a; 【游戏开发】逆向运动学&#xff08;IK&#xff09;详解 - 知乎 (zhihu.co…

【Linux】线程的概念

文章目录 &#x1f4d6; 前言1. 线程的引入1.1 执行流&#xff1a;1.2 线程的创建&#xff1a;1.3 线程的等待&#xff1a; 2. 查看线程2.1 链接线程库&#xff1a;2.2 ps -aL&#xff1a; 3. 页表的认识3.1 二级页表&#xff1a;3.2 页表的实际大小&#xff1a; 4. 再看线程4.…

WPF——Control与Template理解

文章目录 一、前言二、控件三、模板3.1 DataTemplate3.2 ControlTemplate3.3 ContentPresenter 四、结语 一、前言 最近又翻看了下刘铁猛的《深入浅出WPF》&#xff0c;发现对模板章节中的部分内容有了更深的体会&#xff0c;所以写篇文扯扯。 文章标题是Control与Template&a…

Linux vim的常见基本操作

目录 vim是一款多模式的编辑器 命令模式下&#xff1a; 用小写英文字母「h」、「j」、「k」、「l」&#xff0c;分别控制光标左、下、上、右移一格 gg&#xff1a;定位到代码第一行 nshiftg 定位到任意一行/最后一行 「 $ 」&#xff1a;移动到光标所在行的结尾 「 ^ 」&…

python基础开发篇3——线上环境部署Django项目

文章目录 一、基本了解二、打包本地项目三、服务器环境准备四、安装web服务4.1 使用uwsgi代理4.2 使用nginx代理&#xff08;推荐&#xff09; 五、部署daphne 一、基本了解 部署思路&#xff1a; Nginx服务接收浏览器的动态请求&#xff0c;再通过uwsgi模块将请求转发给uwsgi服…

利用html+css+js实现回到顶部小功能

本章教程&#xff0c;主要是实现一个网站中比较常见的小功能&#xff0c;这个功能就是回到顶部。 功能描述&#xff1a;当浏览器右侧的滚动条&#xff0c;滑动到某个位置的时候&#xff0c;显示回到顶部图标&#xff0c;回到顶部之后&#xff0c;图标作隐藏处理&#xff0c;本文…

c++数据类型

基本数据类型简介 位、字节和内存寻址 最小的内存单位是二进制数字&#xff08;也称为位&#xff09;&#xff0c;它可以保存 0 或 1 的值。你在现代计算机体系结构中&#xff0c;每个位都没有自己唯一的内存地址。这是因为内存地址的数量有限&#xff0c;并且很少需要逐位访…

目标检测笔记(十四): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)

文章目录 一、目标检测介绍二、YOLOv8介绍三、源码获取四、环境搭建4.1 环境检测 五、数据集准备六、 模型训练6.1 方式一6.2 方式二6.3 针对其他任务 七、模型验证八、模型测试九、模型转换9.1 转onnx9.1.1 方式一 9.2 转tensorRT9.2.1 trtexec9.2.2 代码转换9.2.3 推理代码 一…

《JDK17新特性和代码案例演示》

《JDK17新特性和代码案例演示》 &#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全…

酷开系统音乐频道,用音乐治愈你!

音乐作为娱乐生活中的一部分&#xff0c;它可以起到调节心情让身体放松的作用&#xff0c;同时还可以舒缓压力&#xff0c;给大脑一个休息的时间。有句话说得好&#xff1a;“耳机是人类的避难所&#xff0c;音乐是心脏的救命丸”。音乐是一种疗愈身心的存在&#xff0c;耳机线…