热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

数据结构笔记——二叉树的定义和性质

获取更多精彩内容,您还可以关注我的微信公众号——Android机动车。在一些电视节目中,会猜测商品价格,有的人是一点一点的数字累加

获取更多精彩内容,您还可以关注我的微信公众号——Android机动车

在一些电视节目中,会猜测商品价格,有的人是一点一点的数字累加,这样的策略效率太低了。其实有一种经典的折半查找算法,就类似于我们今天要说的二叉树。

二叉树定义

二叉树:是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。

如下图就是一个二叉树:

二叉树特点

二叉树的特点有:

  • 每个结点最多两个子树,所以二叉树中不存在度大于2的结点。注意不是只有两棵子树,而是最多有。没有子树或者有一棵子树都是可以的。
  • 左子树和右子树是有顺序的,次序布恩那个任意颠倒。
  • 即使树中的某结点只有一棵子树,也要区分它是左子树还是右子树。如图:树1和树2是同一棵树,但却是不同的二叉树。

二叉树具有五种基本形态:

  1. 空二叉树;
  2. 只有一个根结点;
  3. 根结点只有左子树;
  4. 根结点只有右子树;
  5. 根结点既有左子树又有右子树。

特殊二叉树

再来介绍一些特殊的二叉树。

1、斜树

顾名思义,斜树一定是斜的,但是往那边斜还是有讲究的。

所有的结点都只有左子树的二叉树叫左斜树,所有结点都是只有右子树的二叉树叫右斜树。两种统称为斜树。

下面两个图分别就是左斜树和右斜树:

2、满二叉树

苏东坡有诗云:人有悲欢离合,月有阴晴圆缺,此事古难全。意思就是完美是理想,不完美才是人生。

我们通常看到的例子全是左高右低、参差不齐的二叉树,是否有完美的二叉树呢。

在一棵二叉树中,如果所有分支结点都存在左子树和右子树,并且所有的叶子结点都在同一层上,这样的二叉树叫做满二叉树。如图

单单是每个结点都有左右子树,不能算是满二叉树,还必须要所有的叶子结点都处在同一层,这样就做到了二叉树的平衡。因此满二叉树的特点有:

  1. 叶子只能出现在最下面一层,出现在其他层就不能达到平衡;
  2. 非叶子结点的度一定是2;
  3. 同样深度的二叉树中,满二叉树的结点个数最多,叶子树最多。

3、完全二叉树

**对一棵具有n个结点的二叉树按层序编号&#xff0c;如果编号为i&#xff08;1<&#61;i<&#61;n&#xff09;的结点与同样深度的满二叉树中编号为i的结点在二叉树中位置完全相同&#xff0c;则这棵二叉树称为完全二叉树。**如图&#xff1a;

首先要从字面上区分&#xff0c;“完全”和“满”的差异&#xff0c;满二叉树一定是完全二叉树&#xff0c;完全二叉树不一定是满的。

注意完全二叉树中的编号与满二叉树中的相同&#xff0c;而且编号全部连续&#xff0c;有断开的就不是完全二叉树&#xff0c;如下图中的三棵树都不是完全二叉树。

完全二叉树的特点&#xff1a;

  1. 叶子结点只能出现在最下面两层&#xff1b;
  2. 最下层的叶子一定集中在左部连续位置&#xff1b;
  3. 倒数二层&#xff0c;若有叶子结点&#xff0c;一定都在右部连续位置&#xff1b;
  4. 如果结点的度为1&#xff0c;则该结点只有左孩子&#xff0c;即不存在只有右子树的情况&#xff1b;
  5. 同样结点数的二叉树&#xff0c;完全二叉树深度最小。

我们也得出一个判断某二叉树是否是完全二叉树的方法&#xff0c;那就是看着树的示意图&#xff0c;心中默默给每个结点按照满二叉树的结构逐层顺序编号&#xff0c;如果编号出现空挡&#xff0c;就说明不是完全二叉树&#xff0c;否则就是。

二叉树的性质

二叉树有一些需要理解并记住的特性&#xff0c;便于更好地使用它。

二叉树性质1

在二叉树的第i层上至多有2i-1个结点&#xff08;i>&#61;1&#xff09;。

上图中&#xff1a; 第1层&#xff1a; 1个&#xff1a; 21-1&#61;20&#61;1 第2层&#xff1a; 1个&#xff1a; 22-1&#61;21&#61;2 第3层&#xff1a; 1个&#xff1a; 23-1&#61;22&#61;4 第4层&#xff1a; 8个&#xff1a; 24-1&#61;23&#61;8

通过数据归纳法&#xff0c;很容易得出在二叉树的第i层上最多有 2i-1个结点。

二叉树性质2

深度为k的二叉树最多有2k-1个结点&#xff08;k>&#61;1&#xff09;。

这里注意是2的k次幂再减1。

如果有一层&#xff0c;最多1&#61;21-1个结点 如果有两层&#xff0c;最多1&#43;2&#61;22-1个结点 如果有三层&#xff0c;最多1&#43;2&#43;4&#61;23-1个结点 如果有四层&#xff0c;最多1&#43;2&#43;4&#43;8&#61;24-1个结点

通过数据归纳法的论证&#xff0c;可以得出如果有k层&#xff0c;结点数最多为2k-1。

二叉树性质3

对任何一棵二叉树T&#xff0c;如果其终端结点数为n0&#xff0c;度为2的结点数为n2&#xff0c;则n0&#61;n2&#43;1

终端结点就是叶子结点&#xff0c;而一棵二叉树&#xff0c;除了叶子结点外&#xff0c;剩下的就是度为1和2的结点了&#xff0c;设n1是度为1的结点数。则树T的结点总数就是n&#61;n0&#43;n1&#43;n2

我们换个角度&#xff0c;再数一数连接线&#xff0c;由于根结点只有分支出去&#xff0c;没有分支进入&#xff0c;所以分支线总数为结点总数减去1&#xff0c;n-1&#61;n1&#43;2n2&#xff0c;又因为n&#61;n0&#43;n1&#43;n2&#xff0c;得出n0&#61;n2&#43;1 。

二叉树性质4

具有n个结点的完全二叉树的深度为不大于log2n的最大整数&#43;1 。

这里不再详细推导。

二叉树性质5

如果对一棵有n个结点的完全二叉树的结点按层序编号&#xff08;从第一层到最后一层&#xff0c;每层从左到右&#xff09;&#xff0c;对任一结点i&#xff08;1<&#61;i<&#61;n&#xff09;有&#xff1a;

  1. 如果i&#61;1&#xff0c;则结点i是二叉树的根&#xff0c;无双亲&#xff1b;如果i>1&#xff0c;则其双亲是结点 ⌊ i/2 ⌋ 。
  2. 如果2i>n&#xff0c;则结点i无左孩子&#xff08;结点i为叶子结点&#xff09;&#xff1b;否则其左孩子是结点2i 。
  3. 如果2i&#43;1>n&#xff0c;则结点i无右孩子&#xff1b;否则其右孩子是结点2i&#43;1 。

下篇文章会讲到二叉树的存储结构和遍历二叉树&#xff0c;希望大家持续关注。

更多精彩内容&#xff0c;欢迎关注我的微信公众号——Android机动车。




推荐阅读
  • Go语言实现堆排序的详细教程
    本文主要介绍了Go语言实现堆排序的详细教程,包括大根堆的定义和完全二叉树的概念。通过图解和算法描述,详细介绍了堆排序的实现过程。堆排序是一种效率很高的排序算法,时间复杂度为O(nlgn)。阅读本文大约需要15分钟。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了互联网思维中的三个段子,涵盖了餐饮行业、淘品牌和创业企业的案例。通过这些案例,探讨了互联网思维的九大分类和十九条法则。其中包括雕爷牛腩餐厅的成功经验,三只松鼠淘品牌的包装策略以及一家创业企业的销售额增长情况。这些案例展示了互联网思维在不同领域的应用和成功之道。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 近年来,大数据成为互联网世界的新宠儿,被列入阿里巴巴、谷歌等公司的战略规划中,也在政府报告中频繁提及。据《大数据人才报告》显示,目前全国大数据人才仅46万,未来3-5年将出现高达150万的人才缺口。根据领英报告,数据剖析人才供应指数最低,且跳槽速度最快。中国商业结合会数据剖析专业委员会统计显示,未来中国基础性数据剖析人才缺口将高达1400万。目前BAT企业中,60%以上的招聘职位都是针对大数据人才的。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 计算成像的原理与应用研究
    本文探讨了计算成像的原理与应用研究。首先介绍了小孔成像实验和软件方面的相关内容。随后从傅里叶光学的角度简单谈了成像的过程。成像是观测样品分布的一种方法,通过成像系统接收光的强度来呈现图像。视网膜作为接收端接收到的图像实际上是由像元组成的矩阵,每个元素代表相应位置像元接收光的强度。大脑通过对图像的分析,得出一系列信息,如识别物体、判断距离等。计算成像是一种采集记录系统,通过处理数据得到样品分布与像的对应关系,用于后续问题的分析。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 本文介绍了腾讯最近开源的BERT推理模型TurboTransformers,该模型在推理速度上比PyTorch快1~4倍。TurboTransformers采用了分层设计的思想,通过简化问题和加速开发,实现了快速推理能力。同时,文章还探讨了PyTorch在中间层延迟和深度神经网络中存在的问题,并提出了合并计算的解决方案。 ... [详细]
  • 词袋模型的通俗介绍
    词,袋, ... [详细]
  • Learning to Paint with Model-based Deep Reinforcement Learning
    本文介绍了一种基于模型的深度强化学习方法,通过结合神经渲染器,教机器像人类画家一样进行绘画。该方法能够生成笔画的坐标点、半径、透明度、颜色值等,以生成类似于给定目标图像的绘画。文章还讨论了该方法面临的挑战,包括绘制纹理丰富的图像等。通过对比实验的结果,作者证明了基于模型的深度强化学习方法相对于基于模型的DDPG和模型无关的DDPG方法的优势。该研究对于深度强化学习在绘画领域的应用具有重要意义。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
author-avatar
手机用户2502858457
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有