数据结构——树(终极版)

树的基本概念:

树的顶部是根节点也是树的入口

父节点:例如:B是F的父节点

子节点:树中的每个节点都可以有0个或多个子节点

叶子节点:像KLFGMIJ这种没有子节点的节点

节点的度:节点的子节点数;例如:B的度为2,D的度为3

树的度:所有节点最大度称为该树的度,该树的度为3

节点的层次:可以表示该节点在树中的相对位置

堂兄弟节点:双亲在同一层;例如:G和H的双亲在同一层,则G和H为堂兄弟节点

节点深度:从根节点开始,达到指定节点的层数为节点深度,例如,D的层数为2所以深度为2

节点高度:从该结点出发到离它最远的叶子节点的层数,例如D出发到M的距离为2,所以D的高度为2

树的高度/深度:指的是该树最大的层数,该树最大的层数为4

二叉树:

单节点树:有一个结点的树

空结点树:根节点为空、

左斜树:只有左子节点

右斜树:只有右子节点

满二叉树:

完全二叉树:

除叶子节点以外所有节点必须填满,并且叶子节点要靠左排序

数组存储二叉树:

数组存储方式主要适用于满二叉树或完全二叉树,

用数组存储中要求节点的位置与索引之间存在明确的映射关系,这种映射关系是按照完全二叉树或满二叉树设计的,如果不是完全二叉树则会浪费一些空间用空位来表示空缺节点

使用数组存储利用率较低,一般使用链表存储

左子:

右子:

二叉树的链表存储:

二叉树结点数:n

指针域数量:2n

非空指针域数:n-1(减去的为根节点)

空指针域数量:n+1

0.递归:

递:将问题拆解成子问题,子问题再拆解为子问题,直到被拆解的问题是最小的子问题

归:最小的子问题被解决了那么上一层也被解决,上上一次也被解决,一直到最开始的问题被解决

编程中,在函数调用本身

1.树的存储结构:

双亲表示法:

用的数组存储

孩子表示法:

用链表

孩子兄弟表示法:

用二叉链表存储

也就是说链表左指针指向第一个孩子,右指针指向兄弟

例如:A的左指针指向左孩子D,右指针指向兄弟B,B没有孩子左指针制空,右指针指向兄弟C

2.二叉树的遍历:

前序遍历:

遍历顺序:根、左、右

void PreOrder(BiTree T){if(T != NULL){visit(T);	//访问根节点PreOrder(T->lchild);	//递归遍历左子树PreOrder(T->rchild);	//递归遍历右子树}
}

中序遍历:

遍历顺序:左根右

void InOrder(BiTree T){if(T != NULL){InOrder(T->lchild);	//递归遍历左子树visit(T);	//访问根结点InOrder(T->rchild);	//递归遍历右子树}
}

后序遍历:

遍历顺序:左右根

void InOrder(BiTree T){if(T != NULL){InOrder(T->lchild);	//递归遍历左子树visit(T);	//访问根结点InOrder(T->rchild);	//递归遍历右子树}
}

例题:

前序遍历:A B D E C F G

中序遍历:D B E A F C G

后序遍历: D E B F G C A

层次遍历:

按照层次遍历:A B C D E F G H I

3.线索二叉树:

线索二叉树是一种改进的二叉树,其中空指针(即没有左右子树的节点)被用来指向节点的前驱或后继。这样可以在遍历树时更高效地访问节点,而不需要使用额外的栈或递归。

前序线索二叉树:

先把二叉树进行前序遍历

像D E C F这种有空指针的将它们的指针指向前驱。

例如:D前驱节点指向B后驱节点指向E,F前驱节点指向C后驱节点为NULL

中序线索二叉树:

后序线索二叉树:

4.森林、树、二叉树之间的转换

树转换为二叉树:

  1. 每层连线
  2. 把多余的枝子减去
  3. 调整形状

我感觉有点像那个孩子兄弟表示法,孩子放左边,孩子的兄弟放右边

二叉树转为树:

  1. 右分支水平拉起
  2. 连接每层老大的双亲
  3. 删掉水平线

就是把右边的兄弟都放到该放的位置上

森林转二叉树

  1. 森林先分别转为二叉树
  2. 前者的根右分支连接后者的根节点

二叉树转为森林:

  1. 如果二叉树根节点右右孩子,切断联系
  2. 然后把每棵二叉树转为树

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

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

相关文章

Minio环境搭建(单机安装包、docker)(一)

前言: 项目中客户不愿意掏钱买oss,无奈只能给他免费大保健来一套。本篇文章只是记录验证可行性,毕竟minio太少文档了,参考着官网来。后面还会再出一套验证集群部署的文章。 一、资料 MinIO官网: MinIO | S3 Compatib…

使用Qt 搭建简单雷达

目录 1.简易雷达图思维导图 2.结果展示图 3.制作流程 3.1表盘的绘制 3.1.1 绘制底色 ​编辑 3.1.2 绘制大圆 3.3.3绘制小圆 3.3.4 绘制小圆的内容 3.3.5 绘制表盘刻度和数字标注 3.3.6 绘制指针 3.3.7 绘制扇形 3.2 设置定时器让表盘动起来 3.3.1 设置动态指针…

Fastjson反序列化漏洞——JNDI注入

一.前言 之前使用反序列化和序列化时写入的到文件里面的,真实环境中,也是这样吗? 当然不是了,通过二进制,字节流数据进行的。 为什么会有JNDI? 由于http和ftp传输消耗资源仍然很大,就有了JRM…

EasyRecovery 17完美破解版 2024 年最新永久免费使用 EasyRecovery激活图文教程

我们在平时使用电脑或者操作文件过程中,或多或少都有过格式化文件或者为了方便,直接摁住了shifitdelete键;删除后发现,我们删错了,有些文件不是我们要删的,甚至有的文件是特别重要的;这时候恢复…

基于java 的医院排号管理系统设计与实现

博主介绍:专注于Java .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的可以…

【无人机设计与控制】四旋翼无人机俯仰姿态保持模糊PID控制(带说明报告)

摘要 为了克服常规PID控制方法在无人机俯仰姿态控制中的不足,本研究设计了一种基于模糊自适应PID控制的控制律。通过引入模糊控制器,实现了对输入输出论域的优化选择,同时解决了模糊规则数量与控制精度之间的矛盾。仿真结果表明,…

FastGPT一站式解决方案[2-应用篇]:轻松实现RAG-智能问答系统,AI工作流、核心模块讲解

FastGPT一站式解决方案[2-应用篇]:轻松实现RAG-智能问答系统,AI工作流、核心模块讲解 1.FastGPT快速使用:基本设置、核心模块讲解 1.1 知识库设置 首先我们需要创建一个知识库。 知识库创建完之后我们需要上传一点内容。 上传内容这里有四种模式: 手动输入:手动输入问…

【网络】高级IO——poll版本TCP服务器

目录 前言 一,poll函数 1.1.参数一:fds 1.2.参数二,nfds 1.3.参数三,timeout 1.4.返回值 1.5.poll函数简单使用示例 二,poll版TCP服务器编写 2.1.编写 2.2.poll的优缺点 2.3.源代码 前言 由于select函数有下面几个特别…

奥维互动地图经纬度导入,再导出ovjsn再转化为kml格式

一、使用python将excel表中的经纬度换算成小数格式。 在文件上看到的经纬度是东经 1165′27.78″,北纬 2310′57.18″,要转化为116.09105,23.182550000000003 格式。如果要用vba编写函数,可能比较麻烦,为此我使用python来转化 i…

【例题】lanqiao3412 最小化战斗力差距

样例输入 3 1 2 3样例输出 1说明 样例中,当 a[1,3],b[2],此时战斗力差距为 1,无法得到比 1 更小的安排方式。 解题思路 目标是|max(a)-min(b)|最小,希望a里的最大值和b里的最小值能差距最小。 转化成:…

2024/9/16 英语每日一段

Stark argues that, in their gummies, at least,“The total sugar in a serving is less than in half a cherry.”Of course, cherries also provide fibre, vitamin C, and antioxidants--and 14 of them would count as one of your five-a-day. Artificial sweeteners to…

Linux操作系统文件权限管理

Linux操作系统下文件的权限分为当前用户权限、用户组权限和其他用户权限,然后每一类用户或组又分为读权限(r)、写权限(w)和可执行权限(x)。 如图1,打开任一目录,右键单击文件,在弹出菜单选择“属性”,在弹出的属性选项…

2022高教社杯全国大学生数学建模竞赛C题 问题一(1) Python代码演示

目录 问题 11.1 对这些玻璃文物的表面风化与其玻璃类型、纹饰和颜色的关系进行分析数据探索 -- 单个分类变量的绘图树形图条形图扇形图雷达图Cramer’s V 相关分析统计检验列联表分析卡方检验Fisher检验绘图堆积条形图分组条形图分类模型Logistic回归随机森林import matplotlib…

1.3 计算机网络的分类

欢迎大家订阅【计算机网络】学习专栏,开启你的计算机网络学习之旅! 文章目录 前言一、按分布范围分类二、按传输技术分类三、按拓扑结构分类四、按使用者分类五、按传输介质分类 前言 计算机网络根据不同的标准可以被分为多种类型,本章从分布…

C语言刷题日记(附详解)(5)

一、选填部分 第一题: 下面代码在64位系统下的输出为( ) void print_array(int arr[]) {int n sizeof(arr) / sizeof(arr[0]);for (int i 0; i < n; i)printf("%d", arr[i]); } int main() {int arr[] { 1,2,3,4,5 };print_array(arr);return 0; } A . 1…

HarmonyOS使用LocationButton获取地理位置

LocationButton LocationKit getAddressesFromLocation方法 步骤&#xff1a; 整合 LocationButton并获取经纬度通过 LocationKit 将经纬度转为地址信息将地址信息渲染到页面上处理异常情况&#xff08;闪退&#xff09; LocationButton({ icon: LocationIconStyle.LINE…

robomimic基础教程(一)——基本概念

robosuite和robomimic都是由ARISE Initiative开发的开源工具&#xff0c;旨在推进机器人学习和机器人操作领域的研究。 一、基本概念 robomimic是一个用于机器人示范学习的框架。它提供了在机器人操作领域收集的大量示范数据集&#xff0c;以及用于从这些数据集中学习的离线学…

初始爬虫6

数据提取 数据提取总结 响应分类 结构化 json数据&#xff08;高频出现&#xff09; json模块 jsonpath模块 xml数据&#xff08;低频出现&#xff09; re模块 …

基于Python DoIPClient库的DoIP上位机开发手顺

代码 address, announcement DoIPClient.await_vehicle_announcement()logical_address announcement.logical_addressip, port addressprint(ip, port, logical_address) 效果 代码 address, announcement DoIPClient.get_entity(ecu_ip_addresssIp, protocol_version3…

重生归来之挖掘stm32底层知识(1)——寄存器

概念理解 要使用stm32首先要知道什么是引脚和寄存器。 如下图所示&#xff0c;芯片通过这些金属丝与电路板连接&#xff0c;这些金属丝叫做引脚。一般做软件开发是不需要了解芯片是怎么焊的&#xff0c;只要会使用就行。我们平常通过编程来控制这些引脚的输入和输出&#xff0c…