当前位置: 首页 > news >正文

树的介绍(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语言版)

前言 在数据结构中树是一种很重要的数据结构&#xff0c;很多其他的数据结构和算法都是通过树衍生出来的&#xff0c;比如&#xff1a;堆&#xff0c;AVL树&#xff0c;红黑色等本质上都是一棵树&#xff0c;他们只是树的一种特殊结构&#xff0c;还有其他比如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

靶机介绍 官方下载地址&#xff1a;https://www.vulnhub.com/entry/hackademic-rtb1,17/ 需要读取靶机的root目录下key.txt 运行环境&#xff1a; 虚拟机网络设置的是NAT模式 靶机&#xff1a;IP地址&#xff1a;192.168.233.131 攻击机&#xff1a;kali linux&#xff0c;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、运行到断点位置后&#xff0c;查看报错char…...

linux深入理解多进程间通信

1.进程间通信 1.1 进程间通信目的 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程资源共享&#xff1a;多个进程之间共享同样的资源。通知事件&#xff1a;一个进程需要向另一个或一组进程发送消息&#xff0c;通知它&#xff08;它们&#xff09;发生了某种事件…...

使用自定义注解+aop实现公共字段的填充

问题描述&#xff1a;对于每个表都有cratetime,updatetime,createby,updateby字段&#xff0c;每次插入数据或者更改数据的时候&#xff0c;都需要对这几个字段进行设置。 Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) public interface AutoFill {//数据库…...

Unity 安卓(Android)端AVProVideo插件播放不了视频,屏幕一闪一闪的

编辑器运行没有问题&#xff0c;但是安卓就有问题&#xff0c;在平板上运行就会报错&#xff1a; vulkan graphics API is notsupported 说不支持Vulkan图形API,解决方法&#xff1a;把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显示黑白图片不正常

背景现象&#xff1a; 1、显示一张黑白图片&#xff0c;颜色反过来了。 from IPython.display import display source Image.open(examples/images/forest_pruned.bmp) display(source) 2、原因&#xff1a; 是pycharm会在深色皮肤下默认反转jupyter notebook输出图片的颜…...

Java异常(Error与Exception)与常见异常处理——第八讲

前言 前面我们讲解了Java的基础语法以及面向对象的思想,相信大家已经基本掌握了Java的基本编程。在之前代码中,我们也看到代码写错了编译器会提示报错,或者编译器没有提示,但是运行的时候报错了,比如前面的数组查询下标超过数组的长度。所以在使用计算机语言进行项目开发的…...

【JAVA】多态

作者主页&#xff1a;paper jie_的博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《JAVASE语法系列》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和…...

android 12 第三方apk系统签名

需求&#xff1a;客户有两个供应商&#xff0c;我们是其中之一&#xff0c;然后客户想将我们的apk 用 另一家供应商的系统签名&#xff0c;安装到另一家供应商的设备上&#xff0c;另一家供应商提供了系统签名文件 用之前的方法 &#xff08;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集合类型有三种&#xff1a;set(集)、list(列表)和map(映射)&#xff0c;而List集合是很常用的一种集合类型&#xff0c; List 我…...

恒运资本:沪指涨逾1%,金融、地产等板块走强,北向资金净买入超60亿元

4日早盘&#xff0c;两市股指盘中强势上扬&#xff0c;沪指、深成指涨超1%&#xff0c;上证50指数涨近2%&#xff1b;两市半日成交约5500亿元&#xff0c;北向资金大举流入&#xff0c;半日净买入超60亿元。 截至午间收盘&#xff0c;沪指涨1.12%报3168.38点&#xff0c;深成指…...

解决WebSocket通信:前端拿不到最后一条数据的问题

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…...

【java】[maven]每次创建一个maven模块时java compiler版本就是1.6与实际版本不一致(解决本质问题)

目录 方案一&#xff1a; 我没有使用 方案二&#xff1a;修改maven配置文件 前言&#xff1a;每次创建一个maven模块时java compiler版本就是1.6与实际版本不一致 使用的使用maven3.9.1 jdk17&#xff0c;但是每次创建一个maven模块都是会影响之前的模块。网上都是修改pom.xm…...

GPT-5继续秘密训练中!ChatGPT开学大礼包

&#x1f989; AI新闻 &#x1f680; GPT-5继续秘密训练中&#xff01;DeepMind联合创始人披露了未来模型的规模增长 摘要&#xff1a;DeepMind联合创始人在采访中透露&#xff0c;OpenAI正在秘密训练GPT-5&#xff0c;未来3年&#xff0c;Inflection模型将比现在的GPT-4大10…...

探索现代媒体播放器的终极指南:免费专业播放解决方案

探索现代媒体播放器的终极指南&#xff1a;免费专业播放解决方案 【免费下载链接】mpv.net &#x1f39e; 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许可服务故障终极修复指南&#xff1a;深入解析文件替换方案 当ArcGIS 10.2.2的许可服务突然罢工&#xff0c;所有常规方法都失效时&#xff0c;那种挫败感只有GIS专业人员才能真正体会。你试过关闭防火墙、调整服务启动类型、甚至重启服务器&#xff0c;但那个令…...

打通飞书与GitLab:基于Webhook的事件通知与精准@实践指南

1. 为什么需要打通飞书与GitLab的通知系统 在软件开发团队中&#xff0c;代码仓库的每一次变更都可能影响整个项目进度。传统的做法是开发人员手动在群里相关同事&#xff0c;或者依赖邮件通知&#xff0c;这种方式效率低下且容易遗漏重要信息。我曾经参与过一个跨时区协作项目…...

音乐自由革命:如何用MusicFree插件打造你的专属免费音乐宇宙

音乐自由革命&#xff1a;如何用MusicFree插件打造你的专属免费音乐宇宙 【免费下载链接】MusicFreePlugins MusicFree播放插件 项目地址: https://gitcode.com/gh_mirrors/mu/MusicFreePlugins 你是否厌倦了在不同音乐平台间来回切换&#xff1f;是否对VIP限制和付费歌…...

CARLA与Autoware融合实践:从自定义地图构建到闭环仿真测试

1. 自定义高精地图的构建与格式转换 在自动驾驶仿真开发中&#xff0c;高精地图是车辆感知和决策的基础。CARLA仿真环境提供了灵活的地图编辑工具&#xff0c;但要将自建地图与Autoware无缝对接&#xff0c;需要特别注意数据格式的兼容性。我曾在实际项目中遇到过多次地图导入…...

iMX8MQ开发板实测:存储、网络与4K解码性能深度解析

1. 项目概述&#xff1a;iMX8MQ开发板深度评测最近拿到了一块飞凌嵌入式出品的OKMX8MQ-C开发板&#xff0c;这是一款基于NXP i.MX 8M Quad处理器设计的核心板底板套件。对于从事嵌入式多媒体、边缘计算或者工业网关开发的朋友来说&#xff0c;i.MX8系列一直是热门选择&#xff…...

智能体的真正核心:从“会聊天的大模型”到“会做事的系统”

大模型虽能"理解语言、回答问题、生成内容"&#xff0c;但仅停留在对话层面无法构成真正智能体。智能体需具备理解目标、感知状态、拆解任务、选择工具、观察反馈、动态修正等闭环能力。其核心结构包括输入感知、记忆、规划、行动、反馈、评估六模块&#xff0c;形成…...

C51内存优化:DATA段间隙问题解决方案

1. C51内存空间中的DATA段间隙问题解析作为一名长期使用Keil C51开发工具链的嵌入式工程师&#xff0c;我经常遇到内存空间利用率问题。最近在调试一个使用bit变量的项目时&#xff0c;发现链接器在寄存器组和bit区域之间留下了15字节的间隙。这种内存浪费在资源紧张的8051系统…...

买服装模板机选中捷、川田、杰克还是慧拿?紧凑型流水线升级,空间与适配才是核心决策

在服装智能制造全面普及的今天&#xff0c;线上模板机已经成为服装企业改造紧凑流水线、实现降本增效的核心装备。当前市场上&#xff0c;中捷、川田、杰克、慧拿四大品牌稳居全球服装自动化设备第一梯队&#xff0c;技术实力、产品品质、品牌口碑均处于行业头部水平。面对 “选…...

OpCore Simplify:告别繁琐配置,轻松构建黑苹果OpenCore EFI的智能工具

OpCore Simplify&#xff1a;告别繁琐配置&#xff0c;轻松构建黑苹果OpenCore EFI的智能工具 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为黑…...