数据结构--树的存储结构

news2024/11/25 22:33:07

数据结构–树的存储结构

树的逻辑结构

树是 n ( n ≥ 0 ) n (n\ge0) n(n0个结点的有限集合,n = 0 时,称为空树,这是一种特殊情况。
在任意一棵非空树中应满足:
1)有且仅有一个特定的称为 根 \color{red}根 的结点。
2)当n >1时,其余结点可分为m (m>0)个 互不相交的有限集合 \color{red}互不相交的有限集合 互不相交的有限集合 T 1 , T 2 , . … , T m T_1, T_2,.…, Tm T1,T2,.,Tm,其中每个集合本身又是一棵树,并且称为根结点的 子树 \color{red}子树 子树

树是一种递归定义的数据结构 \color{green}树是一种递归定义的数据结构 树是一种递归定义的数据结构

二叉树 \color{red}二叉树 二叉树:一个分支结点 最多只能有两棵子树 \color{red}最多只能有两棵子树 最多只能有两棵子树
树 \color{red}树 :一个分支结点 可以有多棵子树 \color{red}可以有多棵子树 可以有多棵子树

对的顺序存储

树 \color{red}树 :一个分支结点 可以有多棵子树 \color{red}可以有多棵子树 可以有多棵子树
只依靠数组下标,无法反映结点之间的逻辑关系 \color{red}只依靠数组下标,无法反映结点之间的逻辑关系 只依靠数组下标,无法反映结点之间的逻辑关系

思路:用数组顺序存储各个结点。每个结点中保存 数据元素、指向双亲结点 ( 父节点)的“指针” \color{red}数据元素、指向双亲结点(父节点)的“指针” 数据元素、指向双亲结点(父节点)的指针

#define MAX_TREE_SIZE 100
typedef struct 
{
    ElemType data;
    int parent; //双亲位置域
}PTNode;
typedef struct
{
    PTNode nodes[MAX_TREE_SIZE];
    int n;  //结点数
}PTree;

拓展:双亲表示法存储“森林”

双亲表示法的优缺点

双亲表示法 \color{red}双亲表示法 双亲表示法
优点 : 找双亲(父节点)很方便 \color{red}优点:找双亲(父节点)很方便 优点:找双亲(父节点)很方便
缺点 : 找孩子不方便,只能从头到尾遍历整个数组 \color{red}缺点:找孩子不方便,只能从头到尾遍历整个数组 缺点:找孩子不方便,只能从头到尾遍历整个数组

适用于“找父亲”多,“找孩子”少的应用场景。如:并查集

树的存储2:孩子表示法

孩子表示法:用数组顺序存储各个结点。每个结点中保存 数据元素、孩子链表头指针 \color{red}数据元素、孩子链表头指针 数据元素、孩子链表头指针

顺序存储 + 链式存储结合 \color{green}顺序存储+链式存储结合 顺序存储+链式存储结合

#define MAX_TREE_SIZE 100
struct CTNode
{
    int chile; //孩子结点在数组中的位置
    struct CTNode* next;
};
typedef struct
{
    ElemType data;
    struct CTNode *firstChile; //第一个孩子
}CTBox;
typedef struct
{
    CTBox nodes[MAX_TREE_SIZE];
    int n, r; //结点总数 & 根的位置
}CTree;

拓展:孩子表示法存储“森林”

森林。森林是m (m≥0)棵互不相交的树的集合

注:用孩子表示法存储森林,需要记录多个根的位置

孩子表示法的优缺点

孩子表示法
优点 : 找孩子很方便 \color{red}优点:找孩子很方便 优点:找孩子很方便
缺点 : 找双亲 ( 父节点)不方便,只能遍历每个链表 \color{red}缺点:找双亲(父节点)不方便,只能遍历每个链表 缺点:找双亲(父节点)不方便,只能遍历每个链表

适用于“找孩子”多,“找父亲”少的应用场景。如 : 服务流程树 \color{green}适用于“找孩子”多,“找父亲”少的应用场景。如:服务流程树 适用于找孩子多,找父亲少的应用场景。如:服务流程树

树的存储3:孩子兄弟表示法

typedef struct CSNode
{
    ElemType data;
    struct CSNode *firstchile, *nextsibling; //第一个孩子和右兄弟指针
} CSNode, *CSTree;

孩子兄弟表示法 ==>

拓展:孩子兄弟表示法存储森林

孩子兄弟表示法 ==>

当使用“孩子兄弟表示法”存储树或森林时,从存储视角来看 形态上与二叉树类似 \color{red}形态上与二叉树类似 形态上与二叉树类似

知识点回顾与重要考点

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

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

相关文章

如何执行Photoshop脚本

环境 Photoshop: CC2017 OS: Windows 10 脚本放置位置 C:\Program Files\Adobe\Adobe Photoshop CC 2015\Presets\Scripts #也就是 PS的安装目录\Presets\Scripts

操作系统接口 MIT 6.828 - 1. Lab 01: Xv6 and Unix utilities

本文会将lab1中的思路以及知识点进行分析,并作为作者学习MIT 6.828的一个学习总结,希望能够帮助到学习该lab的同学们 中文版书籍:中文版书籍 实验教案地址:教案地址 操作系统接口 在操作系统中,为了能够有效地与操作系…

Amelia、Bookly 和 Booked:哪个WordPress预约插件更好?

各种企业都需要预订软件来管理预约。然而,开发预订系统是网站中最复杂和最昂贵的元素之一。 那些使用 WordPress 构建网站的人有一个优势。只需点击几下,他们就可以将预约插件集成到他们的网站中。 预约插件是一个预订向导,可以自动执行和管…

数据结构——堆的实现(细)

目录 1.1 二叉树的顺序结构 普通的二叉树是不适合用数组来存储的,因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结构存储。现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统虚拟进程地址空间中的堆…

Netty核心技术十--Netty 核心源码剖析

1. 基本说明 只有看过Netty源码,才能说是真的掌握了Netty框架。 在 io.netty.example 包下,有很多Netty源码案例,可以用来分析 2. netty 启动过程源码分析 本次分析使用的是example包下的echo 2.1 源码剖析的目的 用源码分析的方式走一下…

Java 动态规划 Leetcode 63. 不同路径 II

该题大部分思路可以根据Leetcode 62. 不同路径这篇博客了解 这里进行基于上面那篇博客后来对该题进行补充 代码展示: class Solution {public int uniquePathsWithObstacles(int[][] obstacleGrid) {int mobstacleGrid.length;int nobstacleGrid[0].length;//创建…

HDFS块详解

HDFS块详解 传统型分布式文件系统的缺点 现在想象一下这种情况:有四个文件 0.5TB的file1,1.2TB的file2,50GB的file3,100GB的file4;有7个服务器,每个服务器上有10个1TB的硬盘。 在存储方式上,我…

Docker安装ElasticSearch8.X docker安装elasticsearch8.X完整详细教程

Docker安装ElasticSearch8.X docker安装elasticsearch8.X完整详细教程 Docker 上安装 ElasticSearch 8.8.1 的步骤:选择要安装的ElasticSearch 版本1、拉取 ElasticSearch 镜像2、创建并运行容器关闭容器启动容器重启容器 3、elasticsearch常用端口以及作用4、测试&…

基于spring cloud alibaba的低代码核心工具,jvs-logic逻辑引擎

在现代企业管理中,决策扮演着至关重要的角色。然而,随着业务规模的扩大和数据量的增加,人工决策变得越来越困难和耗时,而且容易受到主观因素的影响。逻辑引擎的出现为企业提供了一种高效、准确的决策推理工具,能够以逻…

[工业互联-23]:EtherCat从站 - EtherCAT协议栈与工作原理, 软硬件解决方案

目录 第1章 EtherCAT通信原理 1.1 网络架构 1.2 分层模型 2.1 物理层 1.2 数据链路层 1.2.1 EtherCAT数据帧结构 1.2.2 EtherCAT报文寻址 第2章 EtherCAT从站 2.1 概述 2.2 EtherCAT从站的组成包括: 2.3 EtherCAT从站的硬件 2.4 从站控制信息芯片&#…

LeetCode[394]字符串解码

难度:Medium 题目: 给定一个经过编码的字符串,返回它解码后的字符串。 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。 你可以认为输入字符串总是有效的;…

【LeetCode热题100】打卡第34天:排序链表乘积最大的子数组

文章目录 【LeetCode热题100】打卡第34天:排序链表&乘积最大的子数组⛅前言 排序链表🔒题目🔑题解 乘积最大的子数组🔒题目🔑题解 【LeetCode热题100】打卡第34天:排序链表&乘积最大的子数组 ⛅前…

如何将文字转化为语音?三个方法帮你轻松实现!

如何将文字转化为语音?在工作或学习中,我们可能会遇到需要将文字转化为语音的情况,这可能会让一些人感到困惑,不知道如何实现这个转换。其实,只需要利用一些第三方工具,就可以轻松地将文字转化为语音。下面…

十四、flex弹性容器属性样式2

目录: 1.准备工作 2.属性解析: align-items 3.属性解析: align-content 4.弹性元素的属性 一、准备工作 我们在前面的基础上,修改代码,把ul的高度定下来,设置800px, li的高度不定。 然后,body里…

音频采样器 Native Instruments Kontakt7 forMac/Windows图文安装教程

Native Instruments Kontakt是一款功能强大、灵活易用的音乐采样软件,适用于各种音乐创作和制作需求。无论是专业音乐制作人还是初学者,都能通过它来实现创意的音乐作品。 Kontakt具有直观的用户界面,可通过拖放方式导入和管理采样库。它支持…

Vmware虚拟机网络配置回顾

如何配置Vmware里的虚拟机网络?这个东西不常用,都是自己练手用的。能用就行,千万不要花时间记,没意义。 很简单,照着敲 首先登陆自己的虚拟机 vim /etc/sysconfig/network-scripts/ifcfg-ens32 TYPE"Ethernet&q…

数据结构--并查集

数据结构–并查集 逻辑结构―—“集合” 所有元素的全集s 将各个元素划分为若干个互不相交的子集 用互不相交的树,表示多个“集合” “并查集”的存储结构 用一个数组S[ ]即可表示“集合”关系 ‘并查集”的基本操作 集合的两个基本操作―— “并” \color{red}“…

ios14~14.3越狱/root(Taurine牛磺酸1.1.6)

Taurine牛磺酸 一键完美越狱 windows安装时建议关闭本地安全中心(若报毒的话,没有则忽略) 1.安装windows端AltInstaller:安装成功后,电脑右下角控制中心有一个(灰色的 小方块) 2.安装手机端A…

layui入门

layui入门 一.ayui简介1.简单易用2.组件丰富3.高度定制化4.响应式布局5.轻量灵活 2.layui的入门基础操作3.登录实例4.注册实例 一.ayui简介 Layui(流行音 “layui”,来自“领域的模块化”)是一款前端UI框架,专注于提升 Web 开发效…

Jmeter接口关联(三)【使用正则表达式提取值】以及正则表达式提取器中模板的含义及用法

文章目录 前言一、Jmeter中使用正则表达式匹配 1、选择 RegExp Tester2、在线程组------》添加------》后置处理器-------里面添加一个“正则表达式提取器”二、关于正则表达式提取器里面字段的解释 参数说明三、进一步解释Jmeter正则表达式提取器中的模板 1、当模板设置为$0$ …