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

目录

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.rhkb.cn/news/411687.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

太阳方向角/高度角/赤纬角/太阳时角/真平太阳时差/理论计算方法(matlab)

1. 理论学习 方向角,高度角计算公式 如图,直观地描述了方位角(圆盘上红色夹角)与高度角(黄色线与圆盘的夹角) 赤纬角计算公式 地球赤道平面与太阳和地球中心的连线之间的夹角 如图所示,23度那个. 时角计算公式 太阳时角是指日面中心的时角…

SAP BW/BPC:实现自动执行BPC跑包程序

作者 idan lian 如需转载备注出处 如果对你有帮助,请点赞收藏~~~ 用途:创建程序,跑BPC包,把数据从BW应用层跑到BPC,程序可放到处理链或自动作业中,实现定时跑包。 1.步骤 首先需要BPC顾问创建一个他们手动执行的包…

在 Facebook 上投放广告需要多少钱?

Facebook 拥有 23.2 亿的月活跃用户,用户体量非常庞大,你的目标群体出现在社交媒体平台上的可能性非常高,所以企业会选择在Facebook 上投放广告。很多朋友想入局,但总是在思考Facebook 推广到底要花多少钱才能有效?如果…

NoSql数据库 Redis集群详解

目录 一、NoSql数据库简介 1.1 数据库主要分为两大类:关系型数据库与 NoSQL 数据库 1.2 为什么还要用 NoSQL 数据库呢? 1.3 RDBMS和NOSQL的特点及优缺点: 二 Remote Dictionary Server 简介(redis) 2.1 什么是redis …

【数据结构】队列(Queue)

目录 队列概念 ​方法 队列模拟实现 链表实现队列 入队列 出队列 获取队头元素 数组实现队列 入队列 出队列 返回头队列 返回尾队列 完整代码 双链表实现队列 数组实现队列(设计循环队列) 队列概念 队列:只允许在一段进行插入…

悬浮翻译软件有哪些?试试这些利器

在观看外国电影或电视剧的奇幻旅程中,面对字幕如流星般划过屏幕,是否渴望能即时捕捉每一个细微的情感涟漪与幽默火花,让体验更加完整无憾? 此刻,无需再为语言障碍而烦恼!悬浮翻译器电脑版作为你贴心的跨文…

TPM管理培训究竟需要多少天?完整攻略在此

在探讨TPM管理培训究竟需要多少天这一核心问题时,我们首先需要明确TPM管理的核心理念、目标及其在企业运营中的重要性。TPM不仅仅是一套设备维护的方法论,更是一种以提升设备综合效率、改善企业体质为目标的管理哲学。它强调全员参与、全系统管理和全效率…

k8s-使用Network Policies实现网络隔离

一、需求 Kubernetes 的命名空间主要用于组织和隔离资源,但默认情况下,不同命名空间中的 Pod 之间是可以相互通信的。为了实现更严格的网络隔离,同一套k8s需要根据不同的命名空间进行网络环境隔离,例如开发(dev01&…

SRE 必备知识 - Kafka 探秘之零拷贝技术

如果你了解过 Kafka,那么它用到的一个性能优化技术可能会引起你的注意 -- 操作系统的零拷贝(zero-copy)优化。 零拷贝操作可以避免对数据的非必要拷贝,当然,并非是说完全没有拷贝。 在 Kafka 的场景下,操作…

发布npm包到GitLab教程

之前在研究如何搭建UI组件库(内部使用),其中重要的一步就是发布npm包到GitLab。中间踩了很多坑,在这里记录一下整个流程方便大家快速上手。不足之处欢迎指出🙏 1. 获取Token 在gitlab中打开access tokens申请页面&am…

Linux--实现U盘,SD卡的自动挂载

1. 编辑/etc/init.d/rsC或S10mdev文件 在/etc/init.d/rsC或S10mdev中加入以下语句: echo /sbin/mdev > /proc/sys/kernel/hotplug 当有热插拔事件产生时,内核会调用/proc/sys/kernel/hotplug文件里指定的应用程序来处理热插拔事件。把/sbin/mdev写到/proc/sys/kernel/h…

【C++类和对象】类和对象的介绍、this指针以及体会面向对象编程

文章目录 🚀类✈️类的介绍✈️类的访问限定符✈️类的封装 🚀面向对象编程🚀类与对象的联系🚀this指针✈️引出this指针✈️this指针的特性 🚀类 ✈️类的介绍 在C语言中,结构体中仅能声明变量并不能定义…

nginx反向代理,负载均衡,动静分离

反向代理,负载均衡 nginx通常被用作后端服务器的反向代理,这样就可以很方便的实现动静分离以及负载均衡,从而大大提高服务器的处理能力。 nginx实现动静分离,其实就是在反向代理的时候,如果是静态资源,就…

Clickhouse集群化(三)集群化部署

1. 准备 clickhouse支持副本和分片的能力,但是自身无法实现需要借助zookeeper或者clickhouse-keeper来实现不同节点之间数据同步,同时clickhouse的数据是最终一致性 。 2. Zookeeper 副本的写入流程 没有主从概念 平等地位 互为副本 2.1. 部署zookeep…

储能电池热失控监测系统的关键应用场景与安全防护

​ ​储能电池热失控监测系统主要应用于以下几个关键领域,以确保电池系统的安全、稳定运行,并预防因热失控引发的安全事故: ​ ​1.大型可再生能源发电储能 ​ ​这类应用常见于太阳能光伏电站、风力发电场等场景,其中储…

软件测试面试题!收藏起来,每天看一看,月薪20K!

初级测试总结题!必背!必背!必背! 1)软件的概念? 软件是计算机系统中与硬件相互依存的一部分,包括程序、数据以及与其相关文档的完整集合。 2)软件测试的概念? 使用人…

【在Linux世界中追寻伟大的One Piece】应用层协议HTTP

目录 1 -> HTTP协议 2 -> 认识URL 2.1 -> urlencode和urldecode 3 -> HTTP协议请求与响应格式 3.1 -> HTTP请求 3.2 -> HTTP响应 4 -> HTTP的方法 4.1 -> HTTP常见方法 5 -> HTTP的状态码 6 -> HTTP常见Header 7 -> 最简单的HTTP服…

Java笔试面试题AI答之面向对象(5)

文章目录 25. Java 包装类的实例是否可变?不可变类(Immutable Classes)特殊情况总结 26. 简述Java什么是自动装箱和自动拆箱?自动装箱(Autoboxing)自动拆箱(Unboxing)注意事项 27. J…

【6678专题】-点亮LED灯(寄存器方式)

本章需要参考的资料为 《General Purpose Input Output (GPIO) User Guide.pdf》,具体在创龙资料文件夹目录下D:\JYTL\12DSP_FPGA\08_文档\创龙\TL6678ZH-EVM_V1.5\TL6678ZH-EVM_V1.5\6-开发参考资料\数据手册\核心板元器件\DSP\Technical Reference Manual 《Multi…

黑神话:悟空 56项修改器

感谢作者:peizhaochen 说明: 1.先开游戏,再开修改器。 2.了解修改器使用说明。 3.开启修改器主项再使用相应子项[无主项则不用开启][主项如"开启…修改"]。 4.有"Num"的键位为小键盘数字键。 键位功能介绍: F11&#…