[数据结构]二叉树(上)

目录

一、树

1.树的概念

2.树的相关概念

3.树的表示

4.树的应用

二、二叉树

1.二叉树的概念

2.二叉树的性质

3.特殊的二叉树

4.二叉树的顺序存储


一、树

1.树的概念

树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。

有一个特殊的结点,称为根结点,根节点没有前驱结点

除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每一个集合Ti(1<= i <= m)又是一棵结构与树类似的子树。

每棵子树的根结点有且只有一个前驱,可以有0个或多个后继,因此,树是递归定义的。

除根节点之外的节点被划分为非空集,其中每个节点将被称为子树。

树的节点要么保持它们之间的父子关系,要么它们是姐妹节点。

在通用树中,一个节点可以具有任意数量的子节点,但它只能有一个父节点。


 

注意:树形结构中,子树之间不能有交集,否则就不是树形结构

 

2.树的相关概念

节点的度:一个节点含有的子树的个数称为该节点的度; 如上图:A的为2

叶节点或终端节点:度为0的节点称为叶节点; 如上图:J、K、L..等节点为叶节点

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

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

孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点; 如上图:B是A的子节点

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

树的度:一棵树中,最大的节点的度称为树的度; 如上图:树的度为4

节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推; 树的高度或深度:树中节点的最大层次; 如上图:树的高度为4

堂兄弟节点:双亲在同一层的节点互为堂兄弟;如上图:E、F互为兄弟节点

节点的祖先:从根到该节点所经分支上的所有节点;如上图:A是所有节点的祖先

子孙:以某节点为根的子树中任一节点都称为该节点的子孙。如上图:所有节点都是A的子孙

森林:由m(m>0)棵互不相交的树的集合称为森林;

3.树的表示

树结构相对线性表就比较复杂了,要存储表示起来就比较麻烦了,既然保存值域,也要保存结点和结点之间 的关系,实际中树有很多种表示方式如:双亲表示法,孩子表示法、孩子双亲表示法以及孩子兄弟表示法 等。我们这里就简单的了解其中最常用的孩子兄弟表示法。

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

4.树的应用

二、二叉树

1.二叉树的概念

概念:一棵二叉树是结点的一个有限集合,由一个根节点加上两棵别称为左子树和右子树的二叉树组成(可以为空)。

                                                 (现实中的二叉树)

注意:

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

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

二叉树有以下几种情况

2.二叉树的性质

1. 若规定根节点的层数为1,则一棵非空二叉树的第i层上最多有 2^(i-1)个结点.

2. 若规定根节点的层数为1,则深度为h的二叉树的最大结点数是 2^h-1.

3. 对任何一棵二叉树, 如果度为0其叶结点个数为n0 , 度为2的分支结点个数为 n2,则有 n0=n2 +1

 5. 对于具有n个结点的完全二叉树,如果按照从上至下从左至右的数组顺序对所有节点从0开始编号,则对 于序号为i的结点有:

1. i>0 i 位置节点的双亲序号: (i-1)/2 i=0 i 为根节点编号,无双亲节点
2. 2i+1<n ,左孩子序号: 2i+1 2i+1>=n 否则无左孩子
3. 2i+2<n ,右孩子序号: 2i+2 2i+2>=n 否则无右孩子

3.特殊的二叉树

1. 满二叉树:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是2^k-1 ,则它就是满二叉树。

 2. 完全二叉树:完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K 的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对 应时称之为完全二叉树。 要注意的是满二叉树是一种特殊的完全二叉树。

                                     (满二叉树)

注意:k-1层都是满(度为2)

                                                    (完全二叉树)

注意:k-1层都是满,最后一层不一定满,要求从左往右的节点连续。

4.二叉树的顺序存储

我们一般是左父右子

                                          (完全二叉树的顺序存储)

上面的这个就是完全二叉树的顺序存储,我们可以得到以下结论:

左孩子的下标=父亲的下标*2+1

右孩子的下标=父亲的下标*2+2

父亲的下标=(孩子的下标-1)/2

那么如果是非完全二叉树呢?

有人说没有孩子的我们可以直接补上,有人说要空下来.

但是既然我们已经得到上面的结论,我们为了保证结论能用,其实就应该空下来

现在我们拥有这样的一个不完全二叉树,为了满足上面的公式,我们可以先把它补全

->

然后我们就能够得到这个数组:

但是我们发现这样子有个很大的问题,我们发现是不是有很多的空间开辟了确没有存放数据,造成了空间的浪费,如果缺的数据多的话,会造成大量的空间浪费。

因此,我们可以得到如下结论:

数组储存只适用与满二叉树和完全二叉树。


我们一般用堆来存储满二叉树和完全二叉树,下一节我们将讲堆,存储二叉树,让我们下次再见。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024.3.11 训练记录(14)

继续补题 文章目录 ICPC 2018青岛I Soldier GameICPC 2018青岛K Airdrop ICPC 2018青岛I Soldier Game 题目链接 线段树 果然稍微复杂一点的线段树就很难实现啊&#xff0c;不看题解根本没反应过来是线段树 struct Node {int l, r, lb, rb, nb, b; } tr[N * 4];其中&#x…

Linux:kubernetes(k8s)Deployment的操作(13)

创建deployment 命令 kubectl create deploy nginx-deploy --imagenginx:1.7.9 再去使用以下命令分别查询 ubectl get deploy kubectl get replicaset kubectl get pod 他是一个层层嵌套的一个关系 首先是创建了一个 deploy 里面包含着replicaset replicaset里面含有…

如何改掉坏习惯?

每个人在生活中&#xff0c;多多少少都有一些根深蒂固的坏习惯。 比如&#xff1a; 闲暇无聊时总会下意识刷瀑布流、短视频&#xff0c;不知不觉就是一个小时过去&#xff1b; 明明说好要早睡&#xff0c;但睡前总是忍不住东逛逛、西看看&#xff0c;熬到实在撑不住了才上床&a…

uniapp运行钉钉小程序

因项目原因&#xff0c;公司需要在钉钉里面开发小程序。之前用uniapp开发过app&#xff0c;H5&#xff0c;小程序。还真没尝试过钉钉小程序&#xff0c;今天就简单的记录下uniapp运行钉钉小程序中的过程。 在项目目录新建package.json文件&#xff0c;在文件中添加如下代码&am…

计算机视觉研究院 | EdgeYOLO:边缘设备上实时运行的目标检测器及Pytorch实现

本文来源公众号“计算机视觉研究院”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;EdgeYOLO&#xff1a;边缘设备上实时运行的目标检测器及Pytorch实现 代码地址&#xff1a;https://github.com/LSH9832/edgeyolo 今天分享的研究…

如果利用AOP/Aspect来修改方法的入参

问题描述&#xff1a; 最近项目代码过三方测试&#xff08;国企项目&#xff09;&#xff0c;在一系列代码扫描审计检查下&#xff0c;代码发现一部分修改&#xff0c;例如请求参数发生了编码/加密&#xff0c;导致后台需要对请求的参数进行解码/解密&#xff0c;后端那么接口&…

山景BP1048 烧录器烧写

1.首先确保硬件连接没问题&#xff0c;烧写器不能亮红灯&#xff0c;亮红灯说明硬件没正确连接。硬件连接如下&#xff1a; 2.点击Flash Burner 3.编程目标闪存选择SDK包自带的烧写驱动器&#xff0c;闪存映像档选择编译好的bin文件。 4.点击刻录 5.看见有进度条在跑&#x…

MISC:杂项

一、文件类型识别 背景&#xff1a;遇到文件没有后缀&#xff0c;不知道文件类型。 方法一、使用Linux中的file命令 原理&#xff1a;file命令会识别文件的文件头&#xff0c;通过文件头识别出文件类型。 命令格式&#xff1a;file <filename> 而文件头则可通过010edito…

Flutter 核心原理 - UI 框架(UI Framework)

Flutter 既能保证很高的开发效率&#xff0c;又能获得很好的性能。 这两年 Flutter 技术热度持续提高&#xff0c;整个 Flutter 生态和社区也发生了翻天覆地的变化。目前Flutter 稳定版发布到了3.0&#xff0c;现在已经支持移动端、Web端和PC端&#xff0c;通过Flutter 开发的…

【设计模式】一、设计模式概述

文章目录 一、设计模式概述&#xff08;一&#xff09;设计模式是什么1. 设计模式的定义2. 设计模式的组成要素3、常用设计模式一览表 &#xff08;二&#xff09;设计模式的优点&#xff08;用途&#xff09;※ 本文小结 一、设计模式概述 &#xff08;一&#xff09;设计模式…

配置阿里云加速器

国内镜像中心常用阿里云或者网易云。在本地docker中指定要使用国内加速器的地址后&#xff0c;就可以直接从阿里云镜像中心下载镜像。 2024阿里云-上云采购季-阿里云 [rootlocalhost /]# mkdir -p /etc/docker [rootlocalhost /]# tee /etc/docker/daemon.json <<-EOF &…

第五十五天| 583. 两个字符串的删除操作、72. 编辑距离

Leetcode 583. 两个字符串的删除操作 题目链接&#xff1a;583 两个字符串的删除操作 题干&#xff1a;给定两个单词 word1 和 word2 &#xff0c;返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 思考&#xff1a;动态规划。本题中…

网络原理(网络协议初识)

目录 1.网络通信基础 1.1IP地址 1.2端口号 1.3认识协议 1.4五元组 1.5 协议分层 2.TCP/IP五层&#xff08;或四层&#xff09;模型 2.1网络设备所在分层 2.2网络分层对应 3.封装和分用 1.网络通信基础 网络互连的目的是进行网络通信&#xff0c;也即是网络数据传输&#…

Maven简单入门

Maven 一&#xff1a;什么是Maven&#xff1a; Maven是一个项目管理工具&#xff0c;用于构建和管理Java项目。它可以帮助开发人员自动化构建过程&#xff0c;管理项目依赖关系&#xff0c;并协助项目的发布和部署。通过Maven&#xff0c;开发人员可以定义项目的结构、依赖关…

Dubbo:常见的面试题和答案

请关注微信公众号&#xff1a;拾荒的小海螺 1、什么是 Dubbo&#xff1f;它的作用是什么&#xff1f; 答&#xff1a; Dubbo 是一款高性能的 Java RPC 框架&#xff0c;是阿里巴巴公司开源的产品&#xff0c;用于提供高性能的分布式服务框架和面向服务的架构。Dubbo 的主要作…

网络编程套接字(4)——Java套接字(TCP协议)

目录 一、Java流套接字通信模型 二、TCP流套接字编程 1、ServerSocket ServerSocket构造方法&#xff1a; ServerSocket方法: 2、Socket Socket构造方法&#xff1a; Socket方法&#xff1a; 三、代码示例&#xff1a;回显服务器 1、服务器代码 代码解析 2、客户端…

C盘清理_

1.通过注册表来找没有删干净的文件 a.winr b.输入regedit,找到下图相应路径,开始查找,或是选择计算机ctrlf搜索对应的文件夹名

基于springboot+vue实现乌鲁木齐南山冰雪旅游服务网管理系统项目【项目源码+论文说明】

基于springbootvue实现南山冰雪旅游服务网演示 摘要 随着2022年北京冬奥会的成功举办&#xff0c;在冬天进行冰雪运动已经逐渐流行起来&#xff0c;人们慢慢享受到了冰雪活动给大家带来的欢乐&#xff0c;除此之外人们的身体素质也可以得到提升。虽然已经有一部分人可以接受并…

window server2012 卸载iis后,远程连接黑屏

原因分析&#xff1a; 因为自己在卸载IIS的时候&#xff0c;不小心卸载了.net framework&#xff0c;系统没有了图形界面&#xff08;由完整模式Full变为了核心模式core&#xff09;&#xff0c;需要重新恢复.net framework4.5。 解决方法分析&#xff1a; 需要将核心模式co…

WorldGPT、Pix2Pix-OnTheFly、StyleDyRF、ManiGaussian、Face SR

本文首发于公众号&#xff1a;机器感知 WorldGPT、Pix2Pix-OnTheFly、StyleDyRF、ManiGaussian、Face SR HandGCAT: Occlusion-Robust 3D Hand Mesh Reconstruction from Monocular Images We propose a robust and accurate method for reconstructing 3D hand mesh from m…