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

news2024/10/1 5:31:28

目录

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)

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

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

相关文章

基于x86 平台opencv的图像采集和seetaface6的口罩人脸检测识别功能

目录 一、概述二、环境要求2.1 硬件环境2.2 软件环境三、开发流程3.1 编写测试3.2 配置资源文件3.2 验证功能一、概述 本文档是针对x86 平台opencv的图像采集和seetaface6的口罩人脸检测识别功能,opencv通过摄像头采集视频图像,将采集的视频图像送给seetaface6的口罩人脸检测…

Docusign 电子签名的合法性指南【中国】

电子签名法律概述 中华人民共和国(“中国”)于2004年颁布了《电子签名法》(“电子签名法”),并于2015年和2019年进行了重大修订。电子签名法规定,只要当事人同意采用电子签名形式,文件的法律效…

基于重要性加权的LLM自我改进:考虑分布偏移的新框架

LLM自我改进的典型范式是在自生成数据上训练LLM,但是其中的部分数据可能有害,所以应该被过滤掉。但是目前的工作主要采用基于答案正确性的过滤策略,在这篇论文中,证明过滤掉正确但具有高分布偏移程度(DSE)的样本也可以有利于自我改进的结果。 论文的主要贡献如下: 提出了一个…

高并发集群饿了么后端的登录模块

高并发集群饿了么后端的登录模块 1.数据库 非交互式python: 非交互式: 2.数据库的负载均衡:阿里巴巴的mycat 修改配置文件 /usr/local/mycat/conf/server.xml :对外的账号 密码 数据库 /usr/local/mycat/conf/schema.xml 如果出现启动异常&…

搭建自己的金融数据源和量化分析平台(七):定时更新上市公司所属行业门类及大类

0x00 前言 由于此前从深交所下载的股票信息中只有行业门类信息,没有行业大类信息,导致后续解析三大报表和量化选股的时候无法进行: 可以看到深交所的股票是没有大类信息的。 再看看上交所的保险股: 因此需要将深交所股票的所属…

关于 IoTDB 的疑问,我们这次有奖征集!

新的社区活动来啦! 你是否对 IoTDB 的技术/操作还有疑问,并需要得到原厂研发团队的解答? 你是否希望在踊跃提出疑问的同时,收获一份精美小礼物? 为回馈新老朋友对 Apache IoTDB 开源社区的活跃贡献,最新社区…

数据结构day01(数据结构、算法基础知识)

目录 【1】数据结构基础知识 1》什么是数据结构 2》数据 3》逻辑结构 1>线性关系 2>层次关系 3>网状关系 4》存储结构 1>顺序存储 2>链式存储 3>索引存储结构 4>散列存储 5》操作 【2】算法基础知识 1> 什么是算法 2> 算法设计 3> 算…

8金收官!仿真工程师为你揭秘中国跳水梦之队的“水花消失术”

巴黎奥运会上,中国跳水梦之队再一次上演“水花消失术”,不仅赢得了裁判的高分,也令全球观众惊叹不已。 发挥出色的运动员入水如同“牛奶入水”,顺滑得仿佛不带一丝涟漪;而发挥失误的运动员仿佛“炸鱼队”来袭&#xf…

.Net Linux平台下System.Drawing.Imaging替代方案

文章目录 前言一、ImageSharp库二、SkiaSharp库三、System.Drawing.Common库总结 前言 在.NET Standard中,System.Drawing.Imaging 命名空间并不直接支持,因为 System.Drawing 命名空间主要是为了Windows Forms(WinForms)和GDI设计…

FPGA第 5 篇,FPGA技术优略势,FPGA学习方向,FPGA学习路线,FPGA专业知识的学习方向(FPGA现场可编程门阵列学习路线和方向)

前言 前几篇讲了一下FPGA的发展和应用,以及未来前景。具体详细,请看 FPGA发展和应用,以及未来前景https://blog.csdn.net/weixin_65793170/category_12665249.html 这里我们来,记录一下,FPGA专业知识的学习路线 一.…

World of Warcraft [CLASSIC] the Eye of Eternity [EOE] P1-P2

World of Warcraft [CLASSIC] the Eye of Eternity [EOE] 永恒之眼(蓝龙) 第一阶段 第二阶段 第三阶段 载具1-6技能介绍 World of Warcraft [CLASSIC] the Eye of Eternity [EOE]_永恒之眼 eoe-CSDN博客 永恒之眼怎么出副本呢,战斗结束&am…

泛微E9如何更新缓存

泛微E9如何更新缓存 在E9中,是默认开启了数据缓存的,如果直接操作数据库是会存在缓存不更新的问题,E9系统提供以下几种方式进行缓存清空的方式。 注:原则上禁止通过非程序渠道直接修改OA数据库数据,可以直接在页面进行…

LCR 162. 数字 1 的个数 题解

189轮转数组 189. 轮转数组 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 时间复杂度o(n),空间复杂度 o(1) class Solution {public void rotate(int[] nums, i…

Python 如何使用 functools 模块

functools 模块是 Python 标准库中的一个重要模块,它提供了一些有用的高阶函数和工具,帮助开发者更轻松地操作和处理函数。functools 中的工具主要用于函数的缓存、包装、偏函数等功能。 1. functools 模块概述 functools 模块的设计目的是为了简化和增…

无人机+消防车:高楼灭火系统技术详解

“无人机消防车”高楼灭火系统技术是一种创新的消防解决方案,旨在解决高层建筑灭火难题。以下是对该技术的详细解析: 一、技术背景与需求 高层建筑数量多,火灾隐患多发。根据国家消防救援局发布的数据,高层建筑火灾频发&#xf…

MyBatis核心机制

实现MyBatis核心机制环境搭建 1.核心框架示意图 2.模块搭建 1.创建maven项目 2.引入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSc…

超维机器人在工业与能源领域的具身智能探索和应用

具身智能&#xff08;Embodied AI&#xff09;是指机器人能够通过其物理形态与环境的交互&#xff0c;进行感知、学习、决策和执行&#xff0c;从而完成复杂任务的能力。具身智能强调机器人不仅要具备感知环境和分析数据的能力&#xff0c;还要能够通过身体的行为和物理互动来适…

zabbix5.0与7.0版本区别 切换建议

Zabbix5.0和Zabbix7.0的区别 1. 性能和扩展性优化 1.1 高效的数据处理和存储 优化的数据库性能&#xff1a; Zabbix 7.0 在数据库层面进行了多项优化&#xff0c;以减少查询延迟和提高数据处理速度。这包括对数据库结构的改进和索引优化&#xff0c;使得大规模数据的读取和写…

Linux云计算 |【第二阶段】SECURITY-DAY3

主要内容&#xff1a; Prometheus监控服务器、Prometheus被监控端、Grafana监控可视化 补充&#xff1a;Zabbix监控软件不自带LNMP和DB数据库&#xff0c;需要自行手动安装配置&#xff1b;Prometheus监控软件自带WEB页面和DB数据库&#xff1b;Prometheus数据库为时序数据库&…

<数据集>翻越栏杆行为识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;512张 标注数量(xml文件个数)&#xff1a;512 标注数量(txt文件个数)&#xff1a;512 标注类别数&#xff1a;1 标注类别名称&#xff1a;[climbing] 使用标注工具&#xff1a;labelImg 标注规则&#xff1a;对类…