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

这篇具有很好参考价值的文章主要介绍了数据结构--树的存储结构。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数据结构–树的存储结构

数据结构--树的存储结构,408数据结构,数据结构,算法,c++,c语言,树

树的逻辑结构

树是 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}子树 子树

数据结构--树的存储结构,408数据结构,数据结构,算法,c++,c语言,树

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

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

对的顺序存储

数据结构--树的存储结构,408数据结构,数据结构,算法,c++,c语言,树
数据结构--树的存储结构,408数据结构,数据结构,算法,c++,c语言,树

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

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

数据结构--树的存储结构,408数据结构,数据结构,算法,c++,c语言,树
#define MAX_TREE_SIZE 100
typedef struct 
{
    ElemType data;
    int parent; //双亲位置域
}PTNode;
typedef struct
{
    PTNode nodes[MAX_TREE_SIZE];
    int n;  //结点数
}PTree;

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

数据结构--树的存储结构,408数据结构,数据结构,算法,c++,c语言,树
数据结构--树的存储结构,408数据结构,数据结构,算法,c++,c语言,树

双亲表示法的优缺点

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

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

树的存储2:孩子表示法

数据结构--树的存储结构,408数据结构,数据结构,算法,c++,c语言,树
数据结构--树的存储结构,408数据结构,数据结构,算法,c++,c语言,树

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

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

数据结构--树的存储结构,408数据结构,数据结构,算法,c++,c语言,树
#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)棵互不相交的树的集合

数据结构--树的存储结构,408数据结构,数据结构,算法,c++,c语言,树

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

数据结构--树的存储结构,408数据结构,数据结构,算法,c++,c语言,树

孩子表示法的优缺点

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

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

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

数据结构--树的存储结构,408数据结构,数据结构,算法,c++,c语言,树
typedef struct CSNode
{
    ElemType data;
    struct CSNode *firstchile, *nextsibling; //第一个孩子和右兄弟指针
} CSNode, *CSTree;

孩子兄弟表示法 ==>

数据结构--树的存储结构,408数据结构,数据结构,算法,c++,c语言,树

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

数据结构--树的存储结构,408数据结构,数据结构,算法,c++,c语言,树

孩子兄弟表示法 ==>

数据结构--树的存储结构,408数据结构,数据结构,算法,c++,c语言,树

当使用“孩子兄弟表示法”存储树或森林时,从存储视角来看 形态上与二叉树类似 \color{red}形态上与二叉树类似 形态上与二叉树类似文章来源地址https://www.toymoban.com/news/detail-540998.html

知识点回顾与重要考点

数据结构--树的存储结构,408数据结构,数据结构,算法,c++,c语言,树

到了这里,关于数据结构--树的存储结构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构】二叉树的顺序存储结构 —— 堆

    👑作者主页:@进击的安度因 🏠学习社区:进击的安度因(个人社区) 📖专栏链接:数据结构

    2023年04月08日
    浏览(31)
  • 数据结构-二叉树的链式存储

    二叉树的存储结构有顺序结构和链式结构两种,顺序结构我已经在上篇进行了详细的讲解,地址:数据结构-二叉树的顺序存储与堆(堆排序),本篇我们就主要讲解二叉树的链式存储。 二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。

    2024年02月02日
    浏览(39)
  • 数据结构之二叉树的性质与存储结构

      数据结构是程序设计的重要基础,它所讨论的内容和技术对从事软件项目的开发有重要作用。学习数据结构要达到的目标是学会从问题出发,分析和研究计算机加工的数据的特性,以便为应用所涉及的数据选择适当的逻辑结构、存储结构及其相应的操作方法,为提高利用

    2024年01月21日
    浏览(38)
  • 数据结构——二叉树的创建与遍历(链式存储结构)

    二叉树(binary tree)是指树中节点的度不大于2的有序树,它是一种最简单且最重要的树。二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树;左子树和右子树又同样都是二叉树。以下是对链式存

    2024年02月05日
    浏览(42)
  • 【数据结构】树的基础知识及三种存储结构

    💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃 个人主页 :阿然成长日记 👈点击可跳转 📆 个人专栏: 🔹数据结构与算法🔹C语言进阶 🚩 不能则学,不知则问,耻于问人,决无长进 🍭 🍯 🍎 🍏 🍊 🍋 🍒 🍇 🍉 🍓 🍑 🍈 🍌 🍐 🍍 把它叫做树是因为它

    2024年02月09日
    浏览(39)
  • 头歌(C语言)-数据结构与算法-队列-第1关:实现一个顺序存储的队列

    任务描述 相关知识 顺序存储的队列 顺序队列的主要操作 编程要求 测试说明 任务描述 本关任务:实现 step1/SeqQueue.cpp 中的 SQ_IsEmpty 、 SQ_IsFull 、 SQ_Length 、 SQ_In 和 SQ_Out 五个操作函数,以实现判断队列是否为空、是否为满、求队列长度、队列元素入队和出队等功能。 相关知

    2024年02月06日
    浏览(100)
  • 数据结构——二叉树的链式存储的实现

                             InitBiTree(BiTree T)——初始化二叉树。                         CreateBiTree(BiTree T)——先序遍历的顺序建立二叉链表。                         PreOrderTraverse(BiTree T)——先序遍历。                         

    2024年02月04日
    浏览(40)
  • 【数据结构】树与森林(树的存储结构、森林与二叉树的转化、树与森林的遍历)

    树与二叉树知识点文章: 【数据结构】树与二叉树(递归法先序、中序、后序、层次遍历二叉树、二叉树的建立以及求树高的方法) 二叉树遍历算法的应用: 【数据结构】树与二叉树遍历算法的应用(求叶子节点个数、求树高、复制二叉树、创建二叉树、二叉树存放表达式、

    2024年04月13日
    浏览(31)
  • 头歌(C语言)-数据结构与算法-栈的实现-第1关:实现一个顺序存储的栈

    任务描述 相关知识 栈的基本概念 栈结构的定义(C) 顺序栈的操作 编程要求 测试说明 任务描述 本关任务是实现 step1/SeqStack.cpp 中的 SS_IsFull 、 SS_IsEmpty 、 SS_Length 、 SS_Push 和 SS_Pop 五个操作函数,以实现判断栈是否为满、是否为空、求栈元素个数、进栈和出栈等功能。 相关

    2024年02月07日
    浏览(46)
  • 数据结构——二叉树的基本概念及顺序存储(堆)

    目录 一.前言 二.树概念及结构 2.1 树的概念 2.2 树的相关概念 2.3 树的表现 2.4 树在实际中的应用(表示文件系统的目录树结构) 三.二叉树的概念及结构 3.1 概念 3.2 特殊的二叉树 3.3 二叉树的性质 3.4 二叉树的存储结构 3.4.1 顺序存储 3.4.2 链式存储 四.二叉树顺序结构及实现

    2024年02月08日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包