【数据结构】树如何定义 | 如何存储 | 实际应用

news2024/9/22 1:44:58

前言 

如上图,A中的孩子的个数是不固定的。我们无法精确的每个不同的根结点有多少个孩子。所以并不能精确知道需要定义多少个孩子节点。

struct TreeNode
{
	int val;
	struct TreeNode* child1;
	struct TreeNode* child2;
	struct TreeNode* child3;
	//...
	//这样显然是不能的
};

树的表示

指针数组表示法

   

#define N 6
//假设数的度为6
struct TreeNode
{
	int val;
	struct TreeNode* childArr[N];
	//指针数组-这些指针指向孩子数组
};

但是很显然这个指针数组定义树的存储时有一个前提:那就是这个树的度是确定好的

并且一个树的度是所有结点中最大度的结点的度,但是并不是每一个结点的度均为树的度,而是小于或者等于。那么这样就会出现一种情况,好多节点的指针就会浪费

顺序表表示法

那么解决这种情况,可以利用我们以前学习的顺序表,需要几个就插入几个。

struct TreeNode
{
	int val;
	SeqList childSL;
	//顺序表存储孩子
};

左孩子右兄弟表示法(重点)

树结构相对线性表就比较复杂了,要存储表示起来就比较麻烦了,既然保存值域,也要保存结点和结点之间的关系,实际中树有很多种表示方式如:双亲表示法,孩子表示法、孩子双亲表示法以及孩子兄弟表示法 等。我们这里就简单的了解其中最常用的孩子兄弟表示法。 

//左孩子右兄弟
struct TreeNode
{
	int val;
	struct TreeNode* leftchild;
	struct TreeNode* rightbrother;
};

举一个简单的例子就是,假如我要生小孩,我想要生三个小孩,但是我觉得生三个小孩很麻烦,带三个小孩很累啊,那我就可以先生老大,等老大有能力照顾弟弟妹妹的时候,我再生老二,同理再过几年让老二带老三,那这样我就可以轻松一点啦~

那么这里的“左孩子右兄弟”的原理也是类似的,我们可以看一下下面的图例:

树的实际应用

那么在实际情况中,我们什么时候会遇到树呢?

在学习Linux操作系统中,我们可以知道Linux的文件系统的目录树,文件系统就是一个树形结构。当前目录下可以有很多个文件夹或者文件,那么文件夹就有可能是叶子,也有可能
会分下去,每个下面可以有任意多个孩子,那就是一个树形结构。

  • 我们平时敲在Linux中敲的ls,其实底层就是链式结构的遍历,通过找到父节点,然后找到第一个孩子,然后第一个孩子再去用兄弟指针找到把所有的兄弟都找出来。
  • 所以在Linux中,我们所学习的指令本质也就是一串代码。每一个命令底层就是一个程序。目录相关的文件相关的都是程序。
  • 但是在Windows操作系统中,其实就是一个森林,假如在电脑上插入一个U盘的话,那么就是一个森林。例如C盘、D盘、E盘等也就是一个森林。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言数组的距离(ZZULIOJ1200:数组的距离)

题目描述 已知元素从小到大排列的两个数组x[]和y[], 请写出一个程序算出两个数组彼此之间差的绝对值中最小的一个,这叫做数组的距离 。 输入:第一行为两个整数m, n(1≤m, n≤1000),分别代表数组f[], g[]的长度。第二行有m个元素&a…

2023年【四川省安全员B证】找解析及四川省安全员B证作业模拟考试

题库来源:安全生产模拟考试一点通公众号小程序 四川省安全员B证找解析是安全生产模拟考试一点通总题库中生成的一套四川省安全员B证作业模拟考试,安全生产模拟考试一点通上四川省安全员B证作业手机同步练习。2023年【四川省安全员B证】找解析及四川省安…

mac电脑系统活动监控:iStat Menus 中文 for Mac

iStat Menus是一款Mac操作系统上的系统监控工具,它提供了实时的系统状态和性能数据,让用户可以方便地监控和管理自己的电脑。iStat Menus以菜单栏图标的形式显示各种系统指标,用户可以轻松访问和查看这些信息。 以下是iStat Menus软件的一些…

AI实景无人直播源码开发揭秘--SaaS

AI实景无人直播系统是指由技术人员基于无人直播平台开发创建的源代码,核心功能设计包含:实景无人直播,评论实时互动,视频流处理,话术库,语音库等, 无人直播源码模块包含 以下常见模块&#xf…

跨境电商的微商业务:个人品牌的成功之路

随着互联网的发展,跨境电商行业迅猛崛起,微商业务作为其中的一种新型销售模式也逐渐崭露头角。微商业务以低成本、高灵活性的特点,为个人品牌的成功之路开辟了新的可能性。 本文将深入研究跨境电商微商业务,探讨在这个领域中个人…

GPT、GPT-2、GPT-3论文精读笔记

视频:GPT,GPT-2,GPT-3 论文精读【论文精读】_哔哩哔哩_bilibili MAE论文:把bert用回计算机视觉领域 CLIP论文:打通文本和图像 GPT 论文:Improving Language Understanding by Generative Pre-Training …

如何开启MySQL的慢查询日志

说明:如果需要查看某一条SQL查询速度慢,并对慢的SQL进行优化,那么开启MySQL慢查询日志是一定要做的事情,本文介绍如何开启MySQL的慢查询日志; 查看MySQL慢查询是否开启 首先,输入下面的命令,查…

Qt/QML编程学习之心得:一个Qt工程的学习笔记(九)

1、.pro文件 加CONFIG += c++11,才可以使用Lamda表达式(一般用于connect的内嵌槽函数) 2、QWidget 这是Qt新增加的一个类,基类,窗口类,QMainWindow和QDialog都继承与它。 3、Main函数 QApplication a应用程序对象,有且仅有一个 a.exec() 进行消息循环、阻塞 MyWi…

快速入门go语言学习笔记

文章目录 1、初识go1.1、go语言1.2 第一个Go程序 2、基础类型2.1、命名2.2、变量2.2.1 变量声明2.2.2 变量初始化2.2.3 变量赋值2.2.4 匿名变量 2.3、常量2.3.1 字面常量(常量值)2.3.2 常量定义2.3.3 iota枚举 2.4、基础数据类型2.4.1 分类2.4.2 布尔类型2.4.3 整型2.4.4 浮点型…

System-V共享内存和基于管道通信实现的进程池

文章目录 一.进程间通信:进程间通信的本质: 二.Linux管道通信匿名管道:关于管道通信的要点:基于匿名管道构建进程池: 三.System-V共享内存共享内存和命名管道协同通信 参考Linux内核源码版本------linux-2.4.3 一.进程间通信: 操作系统中,为了保证安全性,进程之间具有严格的独…

【linux】服务器CPU占用50%,top/htop/ps却看不到异常进程?使用unhide可以查看!

问题描述 htop发现前32个核全被占满了,但是却找不到对应进程号 查杀 安装unhide查看隐藏进程 apt-get install unhideunhide使用 unhide proc果然发现了隐藏进程 杀死隐藏进程 kill -9 [pid]这么多pid号,我这边杀了其中一个,发现CPU…

为IP地址申请SSL证书

SSL(Secure Sockets Layer)是一种网络协议,用于在浏览器与服务器之间建立安全、加密的连接。SSL证书是用于证明您的网站身份并启用HTTPS(超文本传输安全协议)的安全文件。这种协议可以确保用户与您的网站之间的所有通信…

PHP预约上门回收废品系统的代码披露

PHP预约上门回收废品系统的代码披露 <?phpnamespace app\admin\controller;class Code {public function getTopDomainhuo(){error_reporting(0);$host $_SERVER["HTTP_HOST"];$matchstr "[^\\.]\\.(?:(" . $host . ")|\\w{2}|((" . $ho…

程序环境和预处理(详解版)

我们已经学到这里&#xff0c;这就是关于C语言的最后一个集中的知识点了&#xff0c;虽然它比较抽象&#xff0c;但是了解这部分知识&#xff0c;可以让我们对C代码有更深层次的理解&#xff0c;知道代码在每一个阶段发生什么样的变化。让我们开始学习吧! 目录 1.程序的翻译环…

Excel使用VLOOKUP查询数据

VLOOKUP函数在百度百科中的解释是&#xff1a; 解释一下&#xff0c;函数需要4个参数&#xff1a; 参数1&#xff08;lookup_value&#xff09;&#xff1a;需要匹配的值参数2&#xff08;table_array&#xff09;&#xff1a;在哪个区域里进行匹配参数3&#xff08;col_index…

复费率电表和预付费电表有哪些区别?

随着科技的发展和能源管理的日益严格&#xff0c;电表技术也在不断更新换代。复费率电表和预付费电表作为两种主流的智能电表&#xff0c;各自具有独特的优势和应用场景。接下来&#xff0c;小编来为大家详细解析这两种电表的区别及其应用场景。 一、复费率电表 1.定义及工作原…

【LeetCode刷题】--67.二进制求和

67.二进制求和 方法&#xff1a;模拟计算 class Solution {public String addBinary(String a, String b) {StringBuilder ans new StringBuilder();int carry 0;for(int ia.length()-1,jb.length()-1;i>0||j>0;i--,j--){int sum carry;sum i >0 ? a.charAt(i) …

Linux:VMWare启动虚拟机导致电脑蓝屏并重启问题解决

情况描述&#xff1a; 我这边安装Ubuntu系统后&#xff0c;对Ubuntu进行了汉化操作&#xff0c;重启Ubuntu时&#xff0c;直接导致Windows10蓝屏重启。 解决办法&#xff1a; 1、打开任务管理器&#xff0c;检查Windows10系统是否开启虚拟化功能。 没有开启&#xff0c;就进入…

linux上的通用拍照程序

最近因为工作需要&#xff0c;在ubuntu上开发了一个拍照程序。 为了找到合适的功能研究了好几种实现方式&#xff0c;在这里记录一下。 目录 太长不看版 探索过程 v4l2 QT opencv4.2 打开摄像头 为什么不直接打开第一个视频节点 获取所有分辨率 切换摄像头 太长不看…

2020年06月 Scratch(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 执行以下脚本后舞台上的角色将 ? A:先克隆自身,克隆体出现后被删除。 B:先克隆自身,克隆体出现后删除本体。 C:克隆出自身后本体与克隆体同时被删除。 D:克隆出自身后本体与克…