树的介绍(C语言版)
前言
在数据结构中树是一种很重要的数据结构,很多其他的数据结构和算法都是通过树衍生出来的,比如:堆,AVL树,红黑色等本质上都是一棵树,他们只是树的一种特殊结构,还有其他比如linux系统的文件系统就是一棵树。下面让我们一起来学习一下树的结构和特点吧!
1.树的概念
树是一种非线性的数据结构,它是由n(n >= 0)个有限的节点组成的具有层次结构的集合,把它叫做树,是因为它看起来像一颗倒挂的树,也就是说它根朝上,而叶子朝下的。
》有一个特殊的节点 称为根节点,根节点没有前驱节点
》除了根节点外,其余节点被分为M(M>0)个相互不想交的集合T1,T2,T3,...Tm,其中每一个集合Ti(1 <= i <=m)又是一颗结构与树类似的子树。每棵子树的根节点有且只有一个前驱,可以有多个后继。
》因此树是递归定义的

注意:树的结构中,子树之间不能有交集,否则就不是树形结构
2.与树相关
节点的度:一个节点含有子树的个数,例如上图中A的度为6,D的度为1。
叶子节点或者终端节点:度为零的节点被称为叶子结点。例如H,I,P,Q。
非终端节点或者分支节点:度不为零的节点,上图中的:B,C,D,E...
双亲节点或者父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点; 如上图:A是B的父节点。
孩子节点或者子节点: 一个节点含有的子树的根节点称为该节点的子节点,如上图的B是A的孩子节点。
兄弟节点:具有相同父亲节点的节点互称为兄弟节点。
树的度:一棵树中,最大节点的度称为树的度,如上图树的度为6.
节点的层次:从根节点开始,根为第一层,根的子节点为第二层,以此类推。
树的高度或者深度:树中节点的最大层次,如上图树的高度为4.
堂兄弟节点:双亲在同一层的节点互为堂兄弟;如上图:H,I互为堂兄弟。
节点的祖先:从根到该节点所经分支上的所有节点,如上图,A是所有节点的祖先。
子孙:以某节点为根的子树中的任意一节点都称为该节点的子孙。如上图A节点是所有节点的子孙。
森林:由M棵互不相交的树的集合称为森林。
3.树的表示方法
树的结构相对线性表就复杂多了,要存储起来很麻烦,既要保存值域,也要保存节点与节点之间的关系,实际中树的表示方法有很多种,如:双亲表示法,孩子表示法 ,孩子双亲保护法以及孩子兄弟保护法。在这里介绍最简单的孩子兄弟保护法。
typedef int DataType;
struct Node
{
struct Node* _firstChild1;//第一个孩子节点
struct Node* _pNextBrother;//指向其下一个兄弟节点
DataType _data;//节点中的数据域
};
4.树的应用
树可以表示文件系统的目录树结构,如图:
相关文章:
树的介绍(C语言版)
前言 在数据结构中树是一种很重要的数据结构,很多其他的数据结构和算法都是通过树衍生出来的,比如:堆,AVL树,红黑色等本质上都是一棵树,他们只是树的一种特殊结构,还有其他比如linux系统的文件系…...
Android studio实现圆形进度条
参考博客 效果图 MainActivity import androidx.appcompat.app.AppCompatActivity; import android.graphics.Color; import android.os.Bundle; import android.widget.TextView;import java.util.Timer; import java.util.TimerTask;public class MainActivity extends App…...
基于Halcon的喷码识别方法
具体步骤如下: 1. 读入一幅图片(彩色或黑白); 2. 将RGB图像转化为灰度图像; 3. 提取图片中的圆点特征(喷码图片中多是圆点特征),在Halcon中dots_image() 函数非常适合喷码检测; 4. 通过设定阈值,增强明显特征部分; 5. 进行一系列形态学操作(如闭运算等),将…...
【Sword系列】Vulnhub靶机HACKADEMIC: RTB1 writeup
靶机介绍 官方下载地址:https://www.vulnhub.com/entry/hackademic-rtb1,17/ 需要读取靶机的root目录下key.txt 运行环境: 虚拟机网络设置的是NAT模式 靶机:IP地址:192.168.233.131 攻击机:kali linux,IP地…...
idea使用maven时的java.lang.IllegalArgumentException: Malformed \uxxxx encoding问题解决
idea使用maven时的java.lang.IllegalArgumentException: Malformed \uxxxx encoding问题解决 欢迎使用Markdown编辑器1、使用maven clean install -X会提示报错日志2、在Poperties.java文件的这一行打上断点3、maven debug进行调试4、运行到断点位置后,查看报错char…...
linux深入理解多进程间通信
1.进程间通信 1.1 进程间通信目的 数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件…...
使用自定义注解+aop实现公共字段的填充
问题描述:对于每个表都有cratetime,updatetime,createby,updateby字段,每次插入数据或者更改数据的时候,都需要对这几个字段进行设置。 Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) public interface AutoFill {//数据库…...
Unity 安卓(Android)端AVProVideo插件播放不了视频,屏幕一闪一闪的
编辑器运行没有问题,但是安卓就有问题,在平板上运行就会报错: vulkan graphics API is notsupported 说不支持Vulkan图形API,解决方法:把Vulkan删除掉...
无涯教程-JavaScript - DMIN函数
描述 DMIN函数返回列表或数据库中符合您指定条件的列中的最小数字。 语法 DMIN (database, field, criteria)争论 Argument描述Required/Optionaldatabase 组成列表或数据库的单元格范围。 数据库是相关数据的列表,其中相关信息的行是记录,数据的列是字段。列表的第一行包含…...
GaussDB数据库SQL系列-层次递归查询
目录 一、前言 二、GuassDB数据库层次递归查询概念 三、GaussDB数据库层次递归查询实验示例 1、创建实验表 2、sys_connect_by_path(col, separator) 3、connect_by_root(col) 4、WITH RECURSIVE 四、递归查询的优缺点 1、优点 2、缺点 五、总结 一、前言 层次递归…...
pycharm 下jupyter noteobook显示黑白图片不正常
背景现象: 1、显示一张黑白图片,颜色反过来了。 from IPython.display import display source Image.open(examples/images/forest_pruned.bmp) display(source) 2、原因: 是pycharm会在深色皮肤下默认反转jupyter notebook输出图片的颜…...
Java异常(Error与Exception)与常见异常处理——第八讲
前言 前面我们讲解了Java的基础语法以及面向对象的思想,相信大家已经基本掌握了Java的基本编程。在之前代码中,我们也看到代码写错了编译器会提示报错,或者编译器没有提示,但是运行的时候报错了,比如前面的数组查询下标超过数组的长度。所以在使用计算机语言进行项目开发的…...
【JAVA】多态
作者主页:paper jie_的博客 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文录入于《JAVASE语法系列》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和…...
android 12 第三方apk系统签名
需求:客户有两个供应商,我们是其中之一,然后客户想将我们的apk 用 另一家供应商的系统签名,安装到另一家供应商的设备上,另一家供应商提供了系统签名文件 用之前的方法 (platform.x509.pem platform.pk8客户…...
【论文阅读】自动驾驶中车道检测系统的物理后门攻击
文章目录 Abstract1.Introduction2.Background2.1.DNN-based Lane Detection2.2.Backdoor Attacks2.3.Threat Model2.4.Image Scaling 3.Methodology3.1.Physical Trigger Design3.2.Poison-Annotation Attack3.3.Clean-Annotation Attack 4.Evaluation4.1.Poison-Annotation A…...
ArrayList、LinkedList、Collections.singletonList、Arrays.asList与ImmutableList.of
文章目录 ListArrayListLinkedListArrayList与LinkedList的区别快速构建list集合Collections.singletonListArrays.asListImmutableList.of Java集合类型有三种:set(集)、list(列表)和map(映射),而List集合是很常用的一种集合类型, List 我…...
恒运资本:沪指涨逾1%,金融、地产等板块走强,北向资金净买入超60亿元
4日早盘,两市股指盘中强势上扬,沪指、深成指涨超1%,上证50指数涨近2%;两市半日成交约5500亿元,北向资金大举流入,半日净买入超60亿元。 截至午间收盘,沪指涨1.12%报3168.38点,深成指…...
解决WebSocket通信:前端拿不到最后一条数据的问题
🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...
【java】[maven]每次创建一个maven模块时java compiler版本就是1.6与实际版本不一致(解决本质问题)
目录 方案一: 我没有使用 方案二:修改maven配置文件 前言:每次创建一个maven模块时java compiler版本就是1.6与实际版本不一致 使用的使用maven3.9.1 jdk17,但是每次创建一个maven模块都是会影响之前的模块。网上都是修改pom.xm…...
GPT-5继续秘密训练中!ChatGPT开学大礼包
🦉 AI新闻 🚀 GPT-5继续秘密训练中!DeepMind联合创始人披露了未来模型的规模增长 摘要:DeepMind联合创始人在采访中透露,OpenAI正在秘密训练GPT-5,未来3年,Inflection模型将比现在的GPT-4大10…...
探索现代媒体播放器的终极指南:免费专业播放解决方案
探索现代媒体播放器的终极指南:免费专业播放解决方案 【免费下载链接】mpv.net 🎞 mpv.net is a media player for Windows with a modern GUI. 项目地址: https://gitcode.com/gh_mirrors/mp/mpv.net 还在为Windows平台找不到一款既强大又易用的…...
ArcGIS 10.2.2许可服务罢工了?别慌,试试这个替换Service.txt和ARCGIS.exe的终极方案
ArcGIS 10.2.2许可服务故障终极修复指南:深入解析文件替换方案 当ArcGIS 10.2.2的许可服务突然罢工,所有常规方法都失效时,那种挫败感只有GIS专业人员才能真正体会。你试过关闭防火墙、调整服务启动类型、甚至重启服务器,但那个令…...
打通飞书与GitLab:基于Webhook的事件通知与精准@实践指南
1. 为什么需要打通飞书与GitLab的通知系统 在软件开发团队中,代码仓库的每一次变更都可能影响整个项目进度。传统的做法是开发人员手动在群里相关同事,或者依赖邮件通知,这种方式效率低下且容易遗漏重要信息。我曾经参与过一个跨时区协作项目…...
音乐自由革命:如何用MusicFree插件打造你的专属免费音乐宇宙
音乐自由革命:如何用MusicFree插件打造你的专属免费音乐宇宙 【免费下载链接】MusicFreePlugins MusicFree播放插件 项目地址: https://gitcode.com/gh_mirrors/mu/MusicFreePlugins 你是否厌倦了在不同音乐平台间来回切换?是否对VIP限制和付费歌…...
CARLA与Autoware融合实践:从自定义地图构建到闭环仿真测试
1. 自定义高精地图的构建与格式转换 在自动驾驶仿真开发中,高精地图是车辆感知和决策的基础。CARLA仿真环境提供了灵活的地图编辑工具,但要将自建地图与Autoware无缝对接,需要特别注意数据格式的兼容性。我曾在实际项目中遇到过多次地图导入…...
iMX8MQ开发板实测:存储、网络与4K解码性能深度解析
1. 项目概述:iMX8MQ开发板深度评测最近拿到了一块飞凌嵌入式出品的OKMX8MQ-C开发板,这是一款基于NXP i.MX 8M Quad处理器设计的核心板底板套件。对于从事嵌入式多媒体、边缘计算或者工业网关开发的朋友来说,i.MX8系列一直是热门选择ÿ…...
智能体的真正核心:从“会聊天的大模型”到“会做事的系统”
大模型虽能"理解语言、回答问题、生成内容",但仅停留在对话层面无法构成真正智能体。智能体需具备理解目标、感知状态、拆解任务、选择工具、观察反馈、动态修正等闭环能力。其核心结构包括输入感知、记忆、规划、行动、反馈、评估六模块,形成…...
C51内存优化:DATA段间隙问题解决方案
1. C51内存空间中的DATA段间隙问题解析作为一名长期使用Keil C51开发工具链的嵌入式工程师,我经常遇到内存空间利用率问题。最近在调试一个使用bit变量的项目时,发现链接器在寄存器组和bit区域之间留下了15字节的间隙。这种内存浪费在资源紧张的8051系统…...
买服装模板机选中捷、川田、杰克还是慧拿?紧凑型流水线升级,空间与适配才是核心决策
在服装智能制造全面普及的今天,线上模板机已经成为服装企业改造紧凑流水线、实现降本增效的核心装备。当前市场上,中捷、川田、杰克、慧拿四大品牌稳居全球服装自动化设备第一梯队,技术实力、产品品质、品牌口碑均处于行业头部水平。面对 “选…...
OpCore Simplify:告别繁琐配置,轻松构建黑苹果OpenCore EFI的智能工具
OpCore Simplify:告别繁琐配置,轻松构建黑苹果OpenCore EFI的智能工具 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为黑…...
