【数据结构初阶】第六篇——二叉树的重要性质

news2024/10/10 2:20:04

树的概念及结构

树的概念

树中专有名词

树的表示

二叉树的概念及其重要性质

二叉树的概念

数据结构中的二叉树

特殊的二叉树

二叉树的性质

二叉树的存储结构

顺序结构

链式结构


树的概念及结构

树的概念

树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成的一个具有层次关系的集合。把它叫做树。

树的特点

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

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

每棵子树的根结点有且仅有一个前驱,可以有0个或多个后继。

因此,树是递归定义的。

树中专有名词

节点的度:一个节点含有的子树的个数称为该节点的度。

叶节点(终端节点):度为0的结点称为叶节点。

非终端节点(分支节点):度不为0的节点。

父节点(双亲节点):若一个节点含有子节点,则这个节点称为其子节点的父节点。

子节点(孩子节点):一个结点含有的子树的根节点称为该节点的子节点。

兄弟节点:具有相同父节点的节点互称为兄弟节点。

树的度:一棵树中,最大的节点的度称为树的度。

节点的层次:从根开始定义起,根为第一层,根的子节点为第二层,以此类推。

树的高度(深度):树中结点的最大层次。

堂兄弟节点:双亲在同一层的节点互称为堂兄弟节点。

节点的祖先:从根到该节点所经分支上的所有节点。

子孙:以某节点为根的子树中任一节点都称为该节点的子孙。

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

树的表示

树结构相对于线性表就比较复杂了,要存储和表示起来就比较麻烦了,实际中树有很多种表示方法。如:双亲表示法,孩子表示法,孩子兄弟表示法等等。其中最常用的是左孩子右兄弟表示法

左孩子右兄弟表示法中,所定义的节点类型大致是这样的:

typedef int DataType

struct Node
{
	struct Node* firstChild;   //第一个孩子结点
	struct Node* nextBrother;  //指向下一个兄弟结点
	DataType data;             //结点中的数据域
};

对于任意树,我们都可以用左孩子右兄弟法访问到树中的每一个节点:

二叉树的概念及其重要性质

二叉树的概念

二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个结点。

二叉树的特点:
 每个结点最多有两棵子树,即二叉树不存在度大于2的结点。
 二叉树的子树有左右之分,其子树的次序不能颠倒。

数据结构中的二叉树

特殊的二叉树

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

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

总结:

满二叉树:若树的深度为k,那么它的每一层的节点都必须是满的。

完全二叉树:若树的深度为k,那么它的前k-1层的节点必须都是满的,第k层的节点数可以不是满的但必须是从左到右的。

二叉树的性质

性质一:若规定根节点的层数为1,则一课非空二叉树的第i层上最多有2^(i-1)个节点。

 性质二:若规定根节点的层数为1,则深度为h的二叉树最大节点数为2^h-1个。

例题1:一棵完全二叉树的结点数为531,那么这棵树的高度为( )。

假设该完全二叉树的层数为K,则该完全二叉树的前K-1层的结点总数为2K-1-1,若该完全二叉树是满二叉树,则该满二叉树的结点总数为2K-1,所以深度为K的完全二叉树的结点总数范围为:2K-1-1 < N <= 2K-1。因为29 < 531 <= 210,所以该完全二叉树的高度为10。

性质三: 对任何一课二叉树,如果度为0的叶结点个数为n0,度为2的分支结点个数为n2,则有n0=n2+1;

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

根据性质三,叶子结点(度为0)的个数200个,由于199+200 = 399(该二叉树的总结点数),所以该二叉树的叶子结点数为200。

例题2:在具有2n个结点的完全二叉树中叶子结点个数为( )。

根据性质三,度为0的结点数和度为2的结点数之和应为奇数,因为该完全二叉树的结点总数为2n(偶数),所以二叉树中必然存在一个度为1的结点。于是可以推出:度为0的结点和度为2的结点总共有2n-1个。性质三:对任何一棵二叉树,度为0的叶结点个数比度为2的分支结点个数多1,所以该二叉树度为1的结点个数为n-1,度为0的结点数(即叶结点数)为n。

性质四:若规定根节点的层数为1,则具有n个节点的满二叉树的深度为h = log2(N+1)。

二叉树的存储结构

顺序结构

 顺序结构存储就是使用数组来存储,一般使用数组只适合表示完全二叉树,因为不是完全二叉树会有空间的浪费。而现实生活中只有堆(一种二叉树)才会使用数组来存储。二叉树的顺序存储在物理上是一个数组,在逻辑上是一棵二叉树

链式结构

 二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素之间的逻辑关系。通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来存储该结点左孩子和右孩子所在的结点的地址。
 链式结构又分为二叉链和三叉链,之后我们会用二叉链来实现二叉树的链式存储结构,三叉链运用于更高阶的数据结构,例如红黑树。

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

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

相关文章

【算法】Brute-Force 算法

目录1.概述2.代码实现本文参考&#xff1a; 《数据结构教程》第 5 版 李春葆 主编 1.概述 &#xff08;1&#xff09;设有两个串 s 和 t&#xff0c;串 t 的定位就是要在串 s 中找到一个与 t 相等的子串。通常把 s 称为目标串(target string)&#xff0c;把 t 称为模式串(patt…

flutter 之 ListView的使用与详解 map for listview.builder 的使用

1.ListView 配合ListTile 实现新闻列表样式 ListView(children: <Widget>[ListTile(title: const Text(我是 title),subtitle: const Text(我是 sub_title),leading: Image.asset(images/c.png,fit: BoxFit.cover,),trailing: const Icon(Icons.chevron_right,size: 22,…

九龙证券|港股盘中暴涨110%!多股涨停,有色、汽车板块爆发!

阴历兔年春节后第三个交易日上午&#xff0c;A股首要指数重回涨势&#xff0c;全体走势略显震动胶着。北向资金持续呈现净买入趋势&#xff0c;半响净买入额到达30.61亿元。 港股方面&#xff0c;全体体现也较好&#xff0c;恒生科技指数领涨。港股个股方面亮点纷呈&#xff0c…

信息安全管理体系认证

​ISO信息安全管理体系认证 一、什么是ISO信息安全管理体系认证&#xff1f; ISO是信息安全管理体系认证&#xff0c;是由国际标准化组织&#xff08;ISO&#xff09;采纳英国标准协会BS-2标准后实施的管理体系&#xff0c;成为了“信息安全管理”的国际通用语言&#xff0c;企…

Unity Shader - Curved World - 类似 地铁跑酷,动物森友会 的世界扭曲效果 - 球形透视

我发现莉莉丝的《神觉者》在战斗中也有使用到这个效果&#xff0c;视觉效果提升还是很大的 比如&#xff0c;球形投影前的效果 球形投影后的效果 GIF: ShaderLab cginc 固定 Vector.forward 方向的球形透视 参考&#xff1a; Shader in Unity & Curved world shader …

Nacos学习:二、配置中心

2. 配置中心 配置中心将配置从各应用中剥离出来&#xff0c;对配置进行统一管理&#xff0c;应用自身不需要自己去管理配置。 配置中心的服务流程如下&#xff1a; 1、用户在配置中心更新配置信息。 2、服务A和服务B及时得到配置更新通知&#xff0c;从配置中心获取配置。 …

uni-app - H5 网站项目接入集成 51LA 网站统计详细教程(提供 51LA.js 官方插件与引入教程)

前言 如果您需要 Nuxt.js H5 网站项目的引入方式,请访问:Nuxt.js - 网站项目接入 51LA 网站统计 这个需求不常见,网上几乎没有教程,本文来做最新最好用的引入方案。 本文实现了 uniapp 开发的 H5 网页项目,要求接入 51LA 网站统计 的需求, 跟着本文,简简单单的几个步骤…

【HTML】有趣的代码合集(附源码)

文末有源码下载&#xff0c; “窝” 不信你全都看不上 文章目录CSS3 登录表单 个性化登录按钮可爱的CSS3圆盘时钟动画jQuery登录表单CSS3超酷弹出对话框 兼容移动端HTML5翻牌消除小游戏交互式分享按钮 可横向展开HTML5文件上传美化表单 支持拖拽上传纯CSS3加载Loading动画图 12…

unity怎样让玩家在不同材质上行走具有不同脚步声音效

问题:玩家在草地,雪地,木板上行走需要不同的脚步声音效,且无论行走还是奔跑,音效都要和脚步动画同步.思路:在动画上添加事件触发脚步声音效,并判断地面的材质然后播放不同的音效.实现:一.判断地面材质第一种情况是在unity内置terrain上行走地面有草地,石地,木地等,需要有不同音…

【蓝桥杯】历届试题 成绩统计(省赛)Java

【资源限制】 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 【问题描述】 小蓝给学生们组织了一场考试&#xff0c;卷面总分为 100 分&#xff0c;每个学生的得分都是一个 0 到 100 的整数。…

计算机网络概念:

CDN:全国各地因为距离,加速响应,也因此可以节省带宽成本.DNS:域名解析器OSI七层模型:应用层:类比填写的数据报文表示层:类比浏览器层会话层:类比cookie或者token记录上次信息传输层:所谓的三次握手和四次挥手发生在这一层,进程到进程网络层:类似于ip通过路由器找到另一ip,服务器…

Web3中文|元宇宙如何更具包容性?

一旦新技术在发展过程中发生意外&#xff0c;受到最大伤害的往往会是边缘化的群体。 打个比方&#xff0c;自动决定内容访问权限和图像阐释方式的算法实际上受到了种族主义和性别歧视的影响。而拥有多种边缘化身份的人通常面临更大的风险。 这就是为什么当我听到马克扎克伯格…

Linux系统Shell脚本第六章:文件三剑客之sed

目录 一、文本三剑客之sed 1、基本用法 2、sed脚本语法及命令 3、sed选项 4、sed的查找替换使用 5、后向引用 6、变量 一、文本三剑客之sed 1、基本用法 sed [选项]... {自身脚本语法};.... [input file...] 举例&#xff1a; seq 5 |sed #生成1-5数字传给sed #该…

配置python虚拟环境配置【Pycharm为例】 2023年2月1日 14点43分

文章目录1. 新建一个项目2. 新建文件&#xff0c;创建项目3. 此时文件结构4. 安装环境样例5. 检查当前环境点击【解释器设置】点击同开头设置环境6. 开始安装根目录下有这个文件点击【终端】7. 激活虚拟环境7.1 如果出现以下错误([参考链接](https://blog.csdn.net/e5pool/arti…

大数据是干什么的,TOOM大数据舆情监测系统数据挖掘

舆情数据挖掘是指从大量的舆情数据中&#xff0c;通过使用数据挖掘、机器学习等技术&#xff0c;对舆情数据进行分析处理&#xff0c;提取有价值的信息&#xff0c;从而得到舆情分析结果。舆情数据挖掘的目的是了解舆论趋势、话题热点、网民情绪等&#xff0c;为决策提供数据支…

PowerBI实用技巧——利用DATEDIFF实现时间进度百分比

需求概述&#xff1a;根据系统默认时间当年1月~当年12月为一年&#xff08;或指定财年&#xff09;进行时间百分比进度展示。一、默认正常时间进度实现效果&#xff0c;例如现在系统是2023年2月1日&#xff0c;截止当前年时间已经过去了全年的8.49%.1.解决思路&#xff1a;首先…

【Faster R-CNN】之 backbone 代码精读

1、前言 在上一篇文章 【Faster R-CNN】之 Resize_and_Padding 代码精读 中&#xff0c;我们得到了图像尺寸统一的 batch 了&#xff0c;接下来&#xff0c;就是 feed 到 backbone 中 获取 feature map。 2、backbone 1&#xff09;这里的 backbone 其实就是 迁移学习&#…

什么是数据治理?

我们这些搞数据治理的人&#xff0c;几乎每天都会说到“数据治理”这个词。但有很多人依然不清楚数据治理的确切含义&#xff0c;也搞不懂数据治理和数据管理的关系。这一节&#xff0c;我们就来认真辨析“数据治理”这个词。首先&#xff0c;我们来看一看国际数据管理协会DAMA…

C语言学习笔记-条件判断

C 判断 判断结构要求程序员指定一个或多个要评估或测试的条件&#xff0c;以及条件为真时要执行的语句&#xff08;必需的&#xff09;和条件为假时要执行的语句&#xff08;可选的&#xff09;。 C 语言把任何非零和非空的值假定为 true&#xff0c;把零或 null 假定为 fals…

python基础学习2--模块、面向对象编程

一、模块 在python中&#xff0c;一个.py文件就称之为一个模块&#xff08;module)。为了避免模块重名冲突&#xff0c;pyton又引入了按目录来组织模块的方法&#xff0c;成为包(package)。 比如mycompany&#xff0c;按照如下目录存放&#xff1a; 引入了包以后&#xff0c;只…