数据结构之树

前面文章讲的线性表,不论数组还是链,都是“一对一”的关系,本文章节让我们来认识一下“一对多”关系的数据结构——树(Tree)。
树结构分为二叉树和三叉树等,如下图所示。常用的就是二叉树,因此本节以二叉树为主要介绍对象,二叉树之外的树结构暂且统称为非二叉树。
在这里插入图片描述
树在数据结构中占据重要的地位。对于树结构的学习其实不难,先了解它的概念和性质,然后结合图示去理解,最后亲自动手实现其功能,按照这样的思路去学习,一定可以轻松掌握。

  • 节点:用树存储的每一个数据元素都称为节点;
  • 父节点:也叫双亲节点,某一节点的上一个节点即为其父节点,如在上图中,A是B、C、D的父节点,B是E、F的父节点;
  • 子节点:与父节点相反,在上图中,B、C、D是A的子节点,E、F是B的子节点;
  • 兄弟节点:拥有同一个父节点的若干节点互为兄弟节点,如在上图中,B、C和D 互为兄弟节点;
  • 根节点:每棵非空树有且只有一个根节点,如上图中的A节点;
  • 叶子节点:也叫叶节点,指没有子节点的节点,如图3.18中的C、E、F、G、H和I节点;
  • 空树:没有节点的树就是空树;
  • 子树:只包含该节点某一 子节点下所有节点的树称为该节点的子树,其有左子树(leftsubtree)和右子树(rightsubtree)之分;
  • 森林:拥有若干棵互不相交的树的集合;
  • 度:一个节点拥有的子节点数(子树数);
  • 层次:根节点为第一层,根节点的子节点为第二层,以此类推;
  • 深度:也叫高度,即树中节点层次的最大值;
  • 有序树:有顺序的树,即对哪个节点在左边及哪个节点在右边有明确规定的树;
  • 无序树:没有限制节点顺序的树。

注意:一棵树的度,是树内各节点的度的最大值。

二叉树

下面让我们来了解一下二叉树的相关知识吧。
二叉树的定义很简单:其一,它是有序树;其二,各节点的度(子节点数)均不超2。但是二叉树的功能却不简单。
二叉树又分为普通二叉树、对称二叉树、满二叉树和完全二叉树,如下图所示。由于各种树之间可相互转化,所以按道理它们均可使用顺序存储和链式存储,但鉴于空间使用率,普通二又树和对称二叉树一般使用链式存储。
在这里插入图片描述

1. 普通二叉树

普通二叉树其实就是二叉树,只是为了将二叉树更好地分类,才在这里为其加上“普通”二字,以下简称为二叉树,如下图所示。
在这里插入图片描述

二叉树的性质如下:

  • 二又树的第i层最多有 2 i − 1 2i-1 2i1 个节点;
  • 二又树最多有 2 k − 1 2k-1 2k1个节点,k为该树的深度;
  • 二双树的叶子节点数 n 0 n_0 n0比度为2的节点数 n 2 n_2 n2多1,即 n 0 n_0 n0= n 2 n_2 n2+1。

对于第3个性质,很多人肯定有疑问:看似毫无关联的 n 0 n_0 n0 n 2 n_2 n2,不可能只相差1吧?其实很好证明。我们知道,树的每个节点头上都有一条分路(根节点除外),于是可以得到等式:
总节点数 = 总路数 + 1 总节点数=总路数+1 总节点数=总路数+1
总节点数即 n 0 + n 1 + n 2 ,总路数即 n 1 + 2 n 2 ,于是可得: 总节点数即 n_0+n_1+n_2,总路数即 n_1+2n_2,于是可得: 总节点数即n0+n1+n2,总路数即n1+2n2,于是可得:
n 0 + n 1 + n 2 = n 2 + 2 n 2 + 1 n_0+n_1+n_2=n_2+2n_2+1 n0+n1+n2=n2+2n2+1
化简可得:
n 0 = n 2 + 1 n_0=n_2+1 n0=n2+1

2. 对称二叉树

如果某二叉树根节点的左右子树互为镜像,则称其对称二叉树。或者换个说法,某二又树与其镜像是完全一致的,则称其对称二叉树,如下图所示。
在这里插入图片描述

3. 满二叉树

满二叉树有两种定义;一种是指所有节点的度为0或2的二叉树(要么“后继无人”,要么“一朝双喜”);另一种是指深度为k,节点数为 2 k − 1 2k-1 2k1的二叉树(要么在最底层作叶子节点,要么就得有两个子节点,就像一个标准的三角呢)。这里以第二种定义为准进行介绍,如下图所示。
在这里插入图片描述
满二叉树除了具有普通二叉树的性质之外,还有以下性质:

  • 第i层的节点数为 2 i − 1 2i-1 2i1
  • 满二叉树的节点数必为 2 k − 1 2k-1 2k1,叶子数必为 2 k − 1 2k-1 2k1,k为该树的深度;
  • 满二叉树的深度 l o g 2 ( n + 1 ) log_2(n+1) log2(n+1),n为该树的节点数;
  • 所有节点的度要么为0,要么为2,并且叶子节点均在最底层。

4. 完全二叉树

完全二叉树由满二叉树演变而来。如果二叉树从根节点到倒数第二层为满二叉树,并且最底层的节点均靠左对齐,则这个二又树为完全二叉树。显而易见,满二叉树一定是完全二叉树,如下图所示。
在这里插入图片描述完全二叉树同样具有二叉树的所有性质,并且其深度为 ⌊ l o g 2 k ⌋ + 1 \lfloor log_2k \rfloor +1 log2k+1,k为该树的节点数。

注意: ⌊ ⌋ \lfloor \rfloor 表示向下取整,如 ⌊ l o g 2 4 ⌋ \lfloor log_24 \rfloor log24 ⌊ l o g 2 5 ⌋ \lfloor log_2 5 \rfloor log25均等于2。

如果将完全二又树的节点按照先从上到下再从左到右的顺序进行标号,那就更有意思了:
(1)若i>1,节点i的父节点为节点 ⌊ i / 2 ⌋ \lfloor i/2 \rfloor i/2
(2) 若2i>n,则节点i为叶子节点,n为该树的节点数;
(3)若2i+1>n,则节点;无右子节点,n为该树的节点数;
(4)若节点i有子节点,则其左孩子为 2 i 2i 2i,右孩子为 2 i + 1 2i+1 2i+1
如果用数组来实现已标号的完全二又树,则变成了“推”(Heap)。

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

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

相关文章

深度学习(5)--Keras实战

目录 一.Keras基础概念 二.如何跑通Keras项目 2.1.在cmd上跑通 2.2.在PyCharm上跑通 一.Keras基础概念 Keras是深度学习中的一个神经网络框架,是一个高级神经网络API,用Python编写,可以在TensorFlow,CNTK或Theano之上运行。 …

如何保护电脑数据?电脑数据怎么保护?

电脑会储存大量的重要数据,而为了避免数据泄露,必须要使用专业的方式进行保护。那么,要如何保护电脑数据呢?下面我们就来了解一下。 文件夹加密超级大师 文件夹加密超级大师是一款专业的电脑数据加密软件,拥有强大的文…

医疗天使禅道使用工作流程:优化医疗服务的必经之路

目录 博客前言 医疗天使禅道使用工作流程 一.使用最高管理员账号admin管理组织结构 1.新增用户 产品经理使用禅道 1.创建产品 2.添加产品模块​编辑 3.添加产品计划 4.添加产品需求 5.创建项目 6.设置团队 项目经理使用禅道 1.关联需求 2.分解任务 测试主管使用禅…

200G数据中心:QSFP56和QSFP-DD光模块如何选择?

随着光通信与互联网技术的迅猛发展,网络数据流量的需求呈指数级增长,电信骨干网流量年均增速高达50%至80%。为了应对日益攀升的数据传输需求,光通信速率实现了从10G、25G、40G到当前主流的100G、200G、400G甚至更高规格的持续演进。 在此背景…

Linux-共享内存

文章目录 前言一、system V共享内存申请共享内存挂载共享内存删除共享内存挂载删除共享内存 二、示例代码三.运行效果 前言 在这之前我们已经学习了两种进程间通信方式:匿名管道和命名管道。 从我们之前的学习已经知道,想让多个进程间进行通信就需要让他…

前端JavaScript篇之intanceof 操作符的实现原理及实现、为什么0.1+0.2 ! == 0.3,如何让其相等

目录 intanceof 操作符的实现原理及实现为什么0.10.2 ! 0.3,如何让其相等 intanceof 操作符的实现原理及实现 instanceof 是一个用于检查对象是否属于特定类的 JavaScript 操作符。它返回一个布尔值,指示对象是否是特定类的实例或者原型链中是否存在该…

常见の算法

前言本文主要使用Java 什么,是快乐星球#¥%……什么是算法? 算法是一组完成任务的指令。任何代码片段都可视为算法,但我们主要介绍常见算法 一、引入——二分查找 二分查找是一种算法,其输入是一个有序的元素列表。如…

浏览器实用:禁止浏览器http自动转成https

前言 因为有些网站支持http和https两种协议访问,有些只支持一种协议访问。但根据动态域名安全策略(HSTS),只要该域名在浏览器中访问过一次https,那么浏览器将强制使http的请求变为https。 虽然这条浏览器的策略有利于提…

Flink入门教程

使用flink时需要提前准备好scala环境 一、创建maven项目 二、添加pom依赖 <properties><scala.version>2.11.12</scala.version></properties><dependency><groupId>org.scala-lang</groupId><artifactId>scala-library<…

携程基于Jira Cloud的敏捷项目管理实践

好的工具可以满足团队在各个成长阶段的管理诉求 实践一&#xff1a;对齐目标/团队OKR/多团队协作战略项目 实践二&#xff1a;以产品为中心的协作框架 实践三&#xff1a;交付团队管理 实践四&#xff1a;和海外子公司对齐&#xff0c;协作

在linux、window环境搭建kafka环境

一、搭建环境前置准备 下载kafka的官网 http://kafka.apache.org/downloads根据自己的需求选择版本,安装包不区分linux和windows环境,这一个安装包均可部署。 源代码包含kafka的代码文件,使用scala编写的。 二、linux环境 1. 上传安装包 我下载的版本是kafka_2.12-3.6.1…

09.Elasticsearch应用(九)

Elasticsearch应用&#xff08;九&#xff09; 1.搜索结果处理包括什么 排序分页高亮返回指定字段 2.排序 介绍 Elasticsearch支持对搜索结果排序&#xff0c;默认是根据相关度算分来排序 支持排序的字段 keyword数值地理坐标日期类型 排序语法 GET /[索引名称]/_sear…

网络协议与攻击模拟_08DHCP协议

技术学习要了解某项技术能干什么&#xff1f;它的详细内容&#xff1f;发展走向&#xff1f; 一、DHCP协议 1、DHCP基本概念 dhcp动态主机配置协议&#xff0c;广泛应用于局域网内部 主要是为客户机提供TCP/IP 参数&#xff08;IP地址、子网掩码、网关、DNS等&#xff09;…

5G赋能智慧文旅:科技与文化的完美结合,打造无缝旅游体验,重塑旅游业的未来

一、5G技术&#xff1a;智慧文旅的强大引擎 5G技术的起源可以追溯到2010年&#xff0c;当时世界各国开始意识到4G技术已经达到了瓶颈&#xff0c;无法满足日益增长的移动通信需求。2013年&#xff0c;国际电信联盟&#xff08;ITU&#xff09;成立了5G技术研究组&#xff0c;开…

超融合系统疑难故障定位与解决实践 3 例(含信创技术栈)

当 IT 系统出现故障&#xff0c;问题定位往往是运维人员最头疼的环节。尤其是超融合系统&#xff0c;由于整体涉及的技术栈比较复杂&#xff0c;且有越来越多的用户基于信创环境进行部署&#xff0c;非常考验厂商和技术人员的专业能力&#xff1a;厂商研发和售后工程师不仅应能…

[pytorch入门] 6. 神经网络

基本介绍 torch.nn&#xff1a; Containers&#xff1a;基本骨架Convolution Layers&#xff1a; 卷积层Pooling layers&#xff1a;池化层Non-linear Activations (weighted sum, nonlinearity)&#xff1a;非线性激活Normalization Layers&#xff1a;正则化层 Container…

一文讲透Excel数据如何导入到Stata?

推荐采用《Stata统计分析从入门到精通》 杨维忠、张甜 清华大学出版社“1.2.6 导入其他格式的数据文件” 的解答。 在Stata主界面选择“文件|导入”命令&#xff08;如图所示&#xff09;&#xff0c;即可看到Stata支持的其他格式的数据文件类型&#xff0c;包括Excel电子表格…

【收藏】幻兽帕鲁创建服务器教程

创建幻兽帕鲁服务器1分钟部署教程&#xff0c;阿里云和腾讯云均推出幻兽帕鲁服务器服务器和部署教程&#xff0c;4核16G和4核32G配置可选&#xff0c;阿腾云atengyun.com分享1分钟自建幻兽帕鲁Palworld服务器教程&#xff1a; 幻兽帕鲁服务器创建教程 幻兽帕鲁服务器官方推荐…

如何在 Linux 上安装 Docker?最权威指南来了!

docker文档&#xff1a;https://docs.docker.com/engine/ 打开docker文档 这里需要注意&#xff0c;服务器上一般是没有界面的&#xff0c;我们只需要安装docker Engine。 卸载历史版本 这一步是可选的&#xff0c;如果之前安装过旧版本的Docker&#xff0c;可以使用如下命令…

[RK-Linux] 移植Linux-5.10到RK3399(十)| 配置AP6256模组使能WIFI、BT功能

手上 ROC-RK3399-PC Pro 使用蓝牙 WIFI 模组是 AP6256。 一、AP6256 模组介绍 AP6256是正基科技(AMPAK)推出的一款低成本、低功耗的双模模块,它集成了Wi-Fi和蓝牙功能。这款模块支持SDIO接口,具有以下特点: 1、型号:AP6256 2、接口:SDIO(Secure Digital Input/Outp…