首页 > 其他分享 >【数据结构】总结二叉树的概念以及存储结构

【数据结构】总结二叉树的概念以及存储结构

时间:2024-08-23 14:52:15浏览次数:10  
标签:存储 struct 结点 二叉树 如上图 数据结构 节点

目录

1. 树的概念及结构

1.1 树的名词定义

1.2 树的表示

2. 二叉树的概念及结构 

2.1 二叉树的概念

2.2 特殊的二叉树

2.2.1 满二叉树

2.2.2 完全二叉树

2.3 二叉树的存储结构

2.3.1 顺序存储

2.3.2 链式存储

3. 选择题


1. 树的概念及结构

1.1 树的名词定义

1. 节点的度:一个节点含有的子树的个数称为该节点的度,如上图:A的度为6。

2. 叶子节点或终端节点:度为0的节点称为叶子节点,如上图:B、C、H、I...等节点为叶子节点。

3. 非终端节点或分支节点:度不为0的节点,如上图:D、E、F、G...等节点为分支节点。

4. 双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点,如上图:A是B的父节点。

5. 孩子节点或子节点:一个节点有父节点,则这个节点是父节点的子节点,如上图:B是A的孩子节点。

6. 兄弟节点:具有相同父节点的节点互称为兄弟节点,如上图:B、C是兄弟节点。

7. 树的度:一棵树中,最大的节点的度称为树的度,如上图:树的度为6。

8. 节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推。

9. 树的高度或深度:树中节点的最大层次,如上图:树的高度为4。

10. 堂兄弟节点:双亲在同一层的节点互为堂兄弟;如上图:H、I互为堂兄弟节点。

11. 节点的祖先与子孙:在一条路径中,以某个节点为视角,在你上面的节点是你的祖先,在你下面的节点是你的子孙。如上图:A-E-J-Q,以E为视角,A是E的祖先,J和Q是E的子孙。

12. 森林:由多棵互不相交的树的集合称为森林;

13. 任何一颗非空二叉树,度为0的节点永远比度为2的节点多一个。

1.2 树的表示

树有很多种表示方式如:双亲表示法,孩子表示法、孩子双亲表示法,孩子兄弟表示法等。下面介绍孩子兄弟表示法。

typedef int DataType;
struct Node
{
    struct Node* _firstChild1;  // 第一个孩子结点
    struct Node* _pNextBrother; // 指向其下一个兄弟结点
    DataType _data;             // 结点中的数据域
};


2. 二叉树的概念及结构 

2.1 二叉树的概念

1. 二叉树不存在度大于2的结点。

2. 二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树。

注意:对于任意的二叉树都是由以下几种情况复合而成的:

2.2 特殊的二叉树

2.2.1 满二叉树

1. 有一颗二叉树,每一个层的结点数都达到最大值,也就是每一层都是满的,则这颗二叉树就是满二叉树。


2. 假设一颗满二叉树的层数为h,那么它的节点总数就是2^h - 1。

由图可知,F(h) = 2^(1-1) + 2^(2-1) + 2^(3-1) + 2^(4-1) + ... + 2^(h-1)。

利用错位相减法得出:F(h) = 2^h - 1。

2.2.2 完全二叉树

1. 有一颗二叉树,从第一层到倒数第二层都是满的,最后一层可满可不满,但节点必须是连续的,则这颗树是完全二叉树。

2. 满二叉树是一种特殊的完全二叉树。

3. 假设有一颗完全二叉树,层数为h,那么这颗二叉树的最大节点个数和最小节点个数分别是多少?

答:当完全二叉树每层都满时节点个数最大,这时可以看作是层数为h的满二叉树,所以最大个数为2^h - 1。

当最后一层的节点只有一个时,总节点个数最小,可以把第一层到倒数第二层看作是满二叉树,再加上最后一层的一个节点即可。得出2^(h-1)。

2.3 二叉树的存储结构

二叉树一般可以使用两种结构存储,一种顺序结构,一种链式结构。

2.3.1 顺序存储

1. 顺序结构存储就是使用数组来存储,一般使用数组只适合表示完全二叉树,因为不是完全二叉树会有空间的浪费。

2. 二叉树顺序存储在物理上是一个数组,在逻辑上是一颗二叉树。

3. 父子节点的下标关系:

leftchild = parent*2 + 1

rightchild = parent*2 + 2

parent = (child-1) / 2


完全二叉树的顺序存储

非完全二叉树的顺序存储

结论:完全二叉树才适合用数组存储。

2.3.2 链式存储

1. 二叉树的链式存储结构是指,用链表来表示一棵二叉树。

2. 通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址。

3. 链式结构又分为二叉链和三叉链。

typedef int BTDataType;

// 二叉链
struct BTNode
{
    struct BTNode* Left;  // 指向当前节点左孩子
    struct BTNode* Right; // 指向当前节点右孩子
    BTDataType data;      // 当前节点值域
};

// 三叉链
struct BTNode
{
    struct BTNode* Parent; // 指向当前节点的双亲
    struct BTNode* Left;   // 指向当前节点左孩子
    struct BTNode* Right;  // 指向当前节点右孩子
    BTDataType data;       // 当前节点值域
};

3. 选择题

1. 某二叉树共有 399 个结点,其中有 199 个度为 2 的结点,则该二叉树中的叶子结点数为( )

A 不存在这样的二叉树

B 200

C 198

D 199

答:B

2.下列数据结构中,不适合采用顺序存储结构的是( )

A 非完全二叉树

B 堆

C 队列

D 栈

答:A

3.在具有 2n 个结点的完全二叉树中,叶子结点个数为( )

A n

B n+1

C n-1

D n/2

答:A

解析:在完全二叉树中,度为1的节点最多为1,最少为0。

4.一棵完全二叉树的节点数位为531个,那么这棵树的高度为( )

A 11

B 10

C 8

D 12

答:B

5.一个具有767个节点的完全二叉树,其叶子节点个数为()

A 383

B 384

C 385

D 386

答:B

DataStructure: 数据结构 (gitee.com)

标签:存储,struct,结点,二叉树,如上图,数据结构,节点
From: https://blog.csdn.net/m0_71164215/article/details/141254263

相关文章

  • 002.DirectPV存储安装
    DirectPV简介DirectPV概述DirectPV是直接连接存储的CSI驱动程序。从更简单的意义上说,它是一个分布式持久卷管理器,而不是像SAN或NAS那样的存储系统。它可以用于发现、格式化、挂载、调度和监视跨服务器的硬盘驱动器。由于KuberneteshostPath和本地pv是静态配置的,功......
  • Windows11 Docker镜像存储路径更改(非C盘路径)
    前言基于WSL2安装docker后,在使用过程中会发现大量的docker镜像文件,使系统C盘容量激增,对电脑后续使用造成不便,所以需要在安装的时候,手动修改docker的镜像地址,使得镜像文件保存到另外的非系统盘中。原因最新的windows提供了新的虚拟化技术(WSL/WSL2),所以设置页面不能镜像的存储位......
  • 【数据结构】【模板】笛卡尔树
    笛卡尔树定义笛卡尔树每个节点有两种属性,一种是键值,一种是优先级。一般将位置作为键值,维护BST的性质,这样其中序遍历一定为\(1~n\)。一般将数值看作优先级,维护堆的性质。构建思路维护一个单调栈,表示现在的右链长度。我们将数组从前往后插入笛卡尔树。对于第\(i\)个......
  • Django集成腾讯COS对象存储
    前言最近遇到一个场景需要把大量的资源文件存储到OSS里,这里选的是腾讯的COS对象存储(话说我接下来想搞的SnapMix项目也是需要大量存储的,我打算搭个MinIO把24T的服务器利用起来~)为啥腾讯不搞个兼容AmazonS3协议的啊……官方的SDK和文档都奇奇怪怪的,感觉国内的厂......
  • 设计高效电商返利平台的数据处理与存储方案
    设计高效电商返利平台的数据处理与存储方案大家好,我是阿可,微赚淘客系统及省赚客APP创始人,是个冬天不穿秋裤,天冷也要风度的程序猿!在电商返利平台的构建过程中,数据处理与存储方案是确保平台性能和稳定性的关键。本文将探讨如何设计一个高效的数据处理与存储方案,以支持大规模......
  • 数据结构-时间、空间复杂度-详解
    数据结构-时间复杂度-详解1.前言1.1数据结构与算法1.2如何衡量一个算法的好坏1.3复杂度2.时间复杂度2.1是什么2.2大O符号只保留最高阶项不带系数常数次为`O(1)`2.3示例示例2.1示例2.2示例2.3示例2.42.4题目3.空间复杂度3.1是什么3.2大O符号3.3示例示例1示例2示例3示......
  • MySQL存储引擎
    一、简介数据库存储引擎是数据库底层软件组件,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据操作。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。现在许多不多的数据库管理系统都支持多种不同的数据引擎......
  • 数据结构--链表(单向链表--有头链表、无头链表)链表的插入、删除、修改、查找
    什么是链表?链表是一种基本的数据结构,用于存储一组数据元素。与数组不同,链表的元素在内存中并不连续存储。链表由一系列节点组成,每个节点包含以下两个主要部分:1.数据部分:存储节点所包含的数据。2.指针部分:存储指向下一个节点的指针(对于单向链表),或者存储指向前一个节点和下......
  • 数据结构之链表(看不懂你来找我)
    数据结构......
  • 知识改变命运 数据结构 【二叉树】
    1.树型结构(了解)1.1概念树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:有一个特殊的结点,称为根结点,根结点没有前驱结点除根结点外,其余结点被分成M......