首页 > 其他分享 >数据结构之二叉树的顺序存储结构与链式存储结构

数据结构之二叉树的顺序存储结构与链式存储结构

时间:2024-08-09 14:54:16浏览次数:13  
标签:存储 结点 二叉树 链式 数据结构 顺序存储 指针

一、顺序存储结构

1. 定义与特点

顺序存储结构是指用一组地址连续的存储单元依次自上而下、自左至右存储完全二叉树上的结点元素。
完全二叉树和满二叉树采用顺序存储比较合适,因为它们的结点序号可以唯一地反映结点之间的逻辑关系,从而既能最大地节省存储空间,又能利用数组元素的下标值确定结点在二叉树中的位置以及结点之间的关系。

2. 存储方式

将二叉树的所有结点安排成为一个恰当的序列,结点在这个序列中的相互位置能反映出结点之间的逻辑关系。
通常采用编号的方法从树根起,自上层至下层,每层自左至右地给所有结点编号。

3. 优缺点

优点:对于完全二叉树和满二叉树,顺序存储结构能够最大化地利用存储空间,并且方便通过数组下标快速访问结点。
缺点:对于一般的二叉树,特别是深度大但结点少的二叉树(如右单支树),顺序存储会浪费大量的存储空间,因为需要为不存在的结点分配空间。

二、链式存储结构

1. 定义与特点

链式存储结构是指用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。
链表中每个结点通常包含数据域和两个指针域,分别用来存放结点的数据和指向其左孩子、右孩子的指针。

2. 存储方式

每个结点包含三个域:数据域(data)、左指针域(lchild)和右指针域(rchild)。
当左孩子或右孩子不存在时,相应指针域值为空(用符号∧或NULL表示)。

3. 优缺点

优点:链式存储结构对于一般的二叉树(特别是那些结点分布不均匀的二叉树)能够节省存储空间,因为它只为实际存在的结点分配空间。此外,链式存储结构还便于插入和删除操作,因为不需要移动大量的结点。
缺点:相对于顺序存储结构,链式存储结构在访问结点时可能需要更长的时间,因为需要通过指针逐个遍历结点。此外,链式存储结构还需要额外的空间来存储指针信息。

4. 扩展

为了方便访问某结点的双亲,还可以给链表结点增加一个双亲字段parent,用来指向其双亲结点。这种存储结构被称为三叉链表,它既便于查找孩子结点,又便于查找双亲结点,但相对于二叉链表而言增加了空间开销。

标签:存储,结点,二叉树,链式,数据结构,顺序存储,指针
From: https://blog.csdn.net/qq_39311377/article/details/140896530

相关文章

  • 问题 K: 数据结构基础11-图的深度优先遍历
    题目描述读入一个邻接矩阵存储的无向图,输出它的深度优先遍历序列。  输入第1行1个整数n,表示图中的顶点数,2<=n<=100接下来的n行是一个n*n的邻接矩阵,a[i][j]=1表示顶点i和顶点j之间有直接边相连,a[i][j]=0表示没有直接边相连,保证i=k时a[i][j]=0,且a[i,j]=a[j,i].输出输......
  • 25版王道数据结构课后习题详细分析 第三章栈、队列和数组 3.1 栈 选择题部分
    一、单项选择题————————————————————————————————————————解析:栈和队列的逻辑结构都是相同的,都属于线性结构,只是它们对数据的运算不同。正确答案:B————————————————————————————————————......
  • 浙大数据结构慕课课后题(03-树2 List Leaves)
    题目要求:给定一棵树,您应该按照从上到下、从左到右的顺序列出所有叶子。输入规格: 每个输入文件都包含一个测试用例。对于每种情况,第一行都给出一个正整数N(<=10),这是树中节点的总数--因此节点的编号从0到N-1.然后N行紧随其后,每行对应一个节点,并给出节点的左右子节点......
  • [数据结构] 划分树
    介绍划分树,一种数据结构,和线段树很像,常用来解决求区间第$k$小的问题,支持在线,但不支持修改,时间复杂度:建树$\Theta(n\logn)$+单次查询$\Theta(\logn)$,空间复杂度$\Theta(n\logn)$,在这种问题及其扩展问题上具有优良的性能,但其它问题就凸显出其局限性;思想划分......
  • 数据结构之Map与Set(上)
    找往期文章包括但不限于本期文章中不懂的知识点:个人主页:我要学编程(ಥ_ಥ)-CSDN博客所属专栏:数据结构(Java版) 目录二叉搜索树Map和Set的介绍与使用 Map的常用方法及其示例Set的常用方法及其示例哈希表 冲突-概念冲突-避免-哈希函数设计冲突-避免-负载因子调节......
  • 哪种编程语言更适合学习数据结构和算法:C++、Java 还是 Python?
    作为一名工程专业的学生,​​我正在尝试决定使用哪种编程语言来学习数据结构和算法(DSA)。我正在考虑C++,它提供高性能和强大的标准模板库,但对于初学者来说可能很复杂。Java具有强大的语法和内置集合,使DSA概念更容易掌握,尽管我不确定它与C++相比的性能。Python以其简单性和......
  • 【数据结构】一篇文章带你深入了解树
    大家好,今天我们学习数据结构中的树,基本会讲完树的主要内容,主要内容包括树的基本概念,一些表示方法,重点学习二叉树,然后会一步一步自己模拟实现树,希望大家多多支持。一,树的基本概念1.1概念树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做......
  • 数据结构-树与二叉树
    王道章节内容知识框架考纲内容引入因为要用到查找的部分知识,故简要引入。要从数据中找到一个值,有静态查找(未发生插入和删除)和动态查找(发生插入和删除)两种方式。而静态查找有两种方法,一种是逐个按顺序查找,一种是高中就有介绍的二分查找。自然而然,我们可以类似地有这......
  • C++ 根据层序遍历数组 构造二叉树
    说明该层序遍历数组中空节点会使用-1代替,即该层序遍历数组可以理解为一个完全二叉树代码利用队列实现左右子节点的存储,每次通过获取队列头部元素即为当前头节点,然后在数组中i和i+1对应该头结点下的左右子节点,如果不为-1,那么说明可以入队。structTreeNode{intval;Tree......
  • 【探索数据结构与算法】——深入了解双向链表(图文详解)
    目录一、双向链表的基本概念 ​​​二、双向链表的结构三、双向链表的基本操作实现方法 1.双向链表的初始化2.双向链表的头插3.双向链表的尾插6.查找节点7.在指定位置之前插入节点8.删除指定位置节点9.打印链表数据  10.双向链表销毁四、完整代码实现 LIst.h......