树的介绍(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…...
避坑指南:lidar_align标定IMU外参时,loader.cpp源码修改与运动轨迹设计的那些关键细节
避坑指南:lidar_align标定IMU外参的核心细节与实战优化 在自动驾驶和机器人定位领域,激光雷达与IMU的联合标定是系统搭建的关键环节。许多开发者在初次使用lidar_align工具时会遇到各种问题——从源码适配的困惑到标定结果的不可靠。本文将深入剖析两个最…...
如何通过Snap Hutao实现原神游戏决策的智能化?
如何通过Snap Hutao实现原神游戏决策的智能化? 【免费下载链接】Snap.Hutao 实用的开源多功能原神工具箱 🧰 / Multifunctional Open-Source Genshin Impact Toolkit 🧰 项目地址: https://gitcode.com/GitHub_Trending/sn/Snap.Hutao …...
springboot+vue基于web的药店管理系统 药品商城在线购药系统
目录同行可拿货,招校园代理 ,本人源头供货商功能模块分析技术实现要点扩展功能建议项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作同行可拿货,招校园代理 ,本人源头供货商 功能模块分析 后台管理系统(SpringBoot&…...
ViT在语义分割中的性能优化:从VOC2012数据集看如何提升自行车识别准确率
ViT在语义分割中的性能优化:从VOC2012数据集看如何提升自行车识别准确率 语义分割作为计算机视觉领域的核心任务之一,其目标是为图像中的每个像素分配类别标签。近年来,Vision Transformer(ViT)凭借其强大的全局建模能…...
护士执业资格考试历年真题及答案解析电子版PDF(2011-2025年)
2026年护士执业资格考试时间为2026年4月11-12日。为助力广大考生高效备考,小编精心整理了涵盖2011年至2025年的护士执业资格考试真题试卷及详细答案解析,包含《专业实务》和《实践能力》,高清PDF电子版,可打印,方便…...
uniapp 雪花算法封装类
1. uniapp 雪花算法封装类 雪花算法(SnowFlake)生成64位整数ID,具有全局唯一、趋势递增、高性能等特点,适合分布式系统。 1.1. 解决分布式全局唯一ID的方法 1.1.1. UUID UUID做全局ID的弊端:UUID是由数字加字母的形式组成,无法保持递增,它使得聚簇索引(主键值和行数据…...
WebAgent :基于 MCP 协议打造的智能应用“超级路由器”
本文由云软件体验技术团队李锦浩原创。 在 NextSDK 介绍文章里,我们聊了怎么用 opentiny/next-sdk 给前端页面快速接入智能化能力——几行代码嵌进去,用户扫个二维码,手机上就能弹出一个 Remoter 对话窗口,直接用自然语言远程操控…...
nli-distilroberta-baseGPU算力优化:显存占用降低37%的DistilRoBERTa推理部署
NLI DistilRoBERTa Base GPU算力优化:显存占用降低37%的推理部署指南 1. 项目概述 自然语言推理(NLI)是理解两段文本之间逻辑关系的重要任务。基于DistilRoBERTa的NLI模型通过知识蒸馏技术,在保持90%以上准确率的同时,模型体积缩小40%&…...
Swin2SR多帧超分:视频序列的时空信息融合
Swin2SR多帧超分:视频序列的时空信息融合 1. 引言 你有没有遇到过这样的情况:从监控录像中截取的关键画面模糊不清,或者老视频中的珍贵片段分辨率太低,无法看清细节?传统单帧超分技术往往力不从心,因为它…...
如何为PageSpy远程调试工具贡献力量:完整社区指南
如何为PageSpy远程调试工具贡献力量:完整社区指南 【免费下载链接】page-spy-web Debug remotely and easily like chrome devtools. 项目地址: https://gitcode.com/gh_mirrors/pa/page-spy-web PageSpy是一款强大的开源远程调试工具,它让开发者…...
