二叉树——基础知识详解

前言:

        经过前面的学习,我们接下来要开始二叉树的学习,因二叉树有难度,为了方便讲解以及各位的理解,本节知识会分成不同的小节进行学习,在本阶段只学习初阶的二叉树(堆,二叉数基本知识,二叉树的实现以及OJ题等),在学习了C++中会学习进阶的二叉树如:AVL树,红黑树等,敬请期待吧!本次学习的是二叉树的基本知识点。注:每小节内容都很重要,还望各位读者不要松懈,随着本博主一起努力学习吧!

一、树的概念

        树,大家都见过,如果我们仔细观察的话会发现以下特点:对于大多数的树来说,其枝条都会汇与一点,一个枝条可能有其它枝条也可能没有对吧。有句话是这样说的:艺术来源于生活。数据结构的命名也不例外。既然它敢起名叫树,那么肯定会与树有相似点。要是没有的话,那为什么不叫其它名字?那么,问题来了?那些相似点体现在哪里?大家可以先想象一下:你心目中树的数据结构长什么样?给你两幅图,你选则哪一副?

图一
图一

                                                  

图二

        大家心目中的是图一还是图二呢?答案为图一。(选择图二的主要原因是本博主图画的丑,不是你们原因)。这时估计有人说了:不是说和树相似吗?我觉得图二明明比图一更相似,为什么不是图二。确实,图二的确更相似。但,你要明白,这样做肯定有人家这样做的道理。在后续对其实现中,你应该能体会到图一才能实现,图二这种只能在理论上实现。

        好了,说了这么多,我来给大家介绍以下其基本的概念吧!吧毕竟是人家的主场。此处,节点与结点无任何本质区别,只有输入法的区别。 以以下这副图为例:

  • 节点的度:一个节点含有的子树的个数称为该节点的度; 如上图:A的为6
  • 叶节点或终端节点:度为0的节点称为叶节点; 如上图:B、H、I等节点为叶节点
  • 非终端节点或分支节点:度不为0的节点; 如上图:D、E、F、G等节点为分支节点
  • 双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点; 如上图:A是B的父节点
  • 孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点; 如上图:B是A的孩子节点
  • 兄弟节点:具有相同父节点的节点互称为兄弟节点; 如上图:B、C是兄弟节点
  • 树的度:一棵树中,最大的节点的度称为树的度; 如上图:树的度为6
  • 节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;
  • 树的高度或深度:树中节点的最大层次; 如上图:树的高度为4
  • 堂兄弟节点:双亲在同一层的节点互为堂兄弟;如上图:H、I互为兄弟节点
  • 节点的祖先:从根到该节点所经分支上的所有节点;如上图:A是所有节点的祖先
  • 子孙:以某节点为根的子树中任一节点都称为该节点的子孙。如上图:所有节点都是A的子孙
  • 森林:由m棵互不相交的树的集合称为森林;

        以上,重要的概念已被加粗。

        相信大家对于大部分概念都能够理解。接下来,我来简单解释一下为什么层次(高度)从一开始,不从零开始。

         或许有人受数组影响,高度应该从零开始,不应该从一开始。假如你也这样想,你不妨这样想:如果树只有一个节点,那它的高度为0,那么,树要是没有节点,那它的高度为-1,是不是听着怪怪的。所以,我们规定:树的高度从一开始。

        以上的概念,也没有必要强行记忆。各位可在后续实践和学习中遇到问题再来回顾即可。

二、树的性质

        学习完概念后,我们就该明白其性质。学习完性质,可以使我们更好的理解树。大家可想一想,树的性质都围绕哪些特点展开?都包含哪一些?树的性质无外乎就围绕:节点和高度展开。以下是基本性质:

        1)树中的结点数等于所有结点的度数之和加1。

        2)度为m 的树中第i层上至多有m^(i-1)个结点(i≥1)。

        3)高度为h的m叉树至多有(m^k-1)/(m-1)个结点,此处k = h。

        4)具有n个结点的m叉树的最小高度为[ logm(n(m - 1)+1)。

        5)   具有n个结点的树的最大高度h为n-m+1。

      

                了解了性质后,来一道例题小试牛刀吧! 

         例题

        在一棵度为4的树T中,若有20个度为4的结点,10个度为3的结点,1个度为2的结点,10个度为1的结点,则树T的叶结点个数是()。

                 A. 41                                                B.82                                                C.113                                        D.122

        先公布答案吧,此题答案为B 82个叶节点。解析如下: 

三、二叉树 

        学习完树的概念,接下来,咱们一起来学习一下二叉树吧。

        什么是二叉树呢?在学习完前面树的概念我们可以猜出来:二叉树即度为2的树称之为二叉树。可参考一下图片:

        作为程序员的你和女朋友一起爬山时见到上面这颗树,当你女朋友惊叹于大自然的鬼斧神工时,你不和事宜飙出一句:wc,居然是满二叉树。你不由自主拜了一拜希望今后写的代码少些bug。只留下你女朋友在风中凌乱。(这个女朋友可能是广大读者杜撰出来的[doge])。

        看到以上图片和文字,我们不禁要问:什么是满二叉树?别急,马上来问你解答疑惑。

        我们学习二叉树,肯定会经历各种各样的树,以下涵盖了各个品种的树:

        1)满二叉树。一棵高度为h,且含有2-1个结点的二叉树称为满二叉树,即树中的每层都含有最多的结点,满二叉树的叶结点都集中在二叉树的最下一层,并且除叶结点之外的每个结点度数均为 2。

        可以对满二叉树按层序编号:约定编号从根结点(根结点编号为1)起,自上而下,自左向右。这样,每个结点对应一个编号,对于编号为i的结点,若有双亲,则其双亲为Li/2」若有左孩子,则左孩子为 2i;若有右孩子,则右孩子为 2i+1。

        2)完全二叉树。高度为h、有n个结点的二叉树,当且仅当其每个结点都与高度为h的满二叉树中编号为 1~n 的结点一一对应时,称为完全二叉树其特点如下:

        1.若 i≤(n/2),则结点i为分支结点,否则为叶结点。
        2.叶结点只可能在层次最大的两层上出现。对于最大层次中的叶结点,都依次排列在该层最左边的位置上。
        3.若有度为1的结点,则只可能有一个,且该结点只有左孩子而无右孩子(重要特征)。按层序编号后,一旦出现某结点(编号为i)为叶结点或只有左孩子,则编号大于的结点均为叶结点。
        4.若n为奇数,则每个分支结点都有左孩子和右孩子;若n为偶数,则编号最大的分支结点(编号为n/2)只有左孩子,没有右孩子,其余分支结点左、右孩子都有。

                 

        3)二叉排序树。左子树上所有结点的关键字均小于根结点的关键字;右子树上的所有结点的关键字均大于根结点的关键字;左子树和右子树又各是一棵二叉排序树。

        4)平衡二叉树。树上任意一个结点的左子树和右子树的深度之差不超过1。 

        咱们目前对于二叉树研究的重点为前两个。

        既然明白其种类,那么也应该明白其性质,性质如下:

        1)非空二叉树上的叶结点数等于度为2的结点数加1,即no=n2+1。(此性质在选择题中常用,拓展到任意一棵树,若结点数量为 n,则边的数量为n-1。)
        2)非空二叉树上第k层上至多有2^(k-1)个结点(k>1)。

        3)高度为h的二叉树至多有 2"-1个结点(h>1)。

        4)对完全二叉树按从上到下、从左到右的顺序依次编号1,2,…,n,则有以下关系:

                1.当i>1时,结点i的双亲的编号为(i/2),即当i为偶数时,其双亲的编号为i/2,它是双亲的左孩子;当i为奇数时,其双亲的编号为(i-1)/2,它是双亲的右孩子。

                2.当 2i≤n时,结点i的左孩子编号为2i,否则无左孩子
                当 2i+1≤n时,结点i的右孩子编号为2i+1,否则无右孩子。

                3.结点i所在层次(深度)为(logi)+1。

        5)具有n个(n>0)结点的完全二叉树的高度为[log(n+1)]或 [logn]+ 1。

        这里的性质就不过多解释,大部分处于树性质的变形。 

        来道例题巩固一下吧:

        若一棵完全二叉树有 768个结点,则该二又树中叶结点的个数是( )。
        A.257                B.258                C.384                D385

        答案为: C。解析如下: 

四、堆

        这里简单介绍一下二叉树的一种结构堆。(注:在现阶段二叉树中只学习堆与二叉树(部分)的实现,以及OJ题,以后的内容会在C++学习,本篇文章,只是先使读者明白概念,其具体实现方式以及讲解会在后续文章中发出,还望理解。)

        说起堆,相信大部分读者会想起把柴火或其他物品堆起来的画面,我们发现,其结构似乎与二叉树类似,都有点头重脚轻的。对的,在数据结构中,堆的本质为:完全二叉树。

        堆有一下性质:

        堆中每个节点的值都满足堆的性质:堆中某个节点的值总是不大于或不小于其父节点的值。

        大跟堆(Max Heap),父节点的值大于等于其子节点的值。

        小根堆(Min Heap),父节点的值小于等于其子节点的值。

         

         明白了基本概念,来一道例题吧:

        1.下列关键字序列为堆的是:
        A 100,60,70,50,32,65

        B 60,70,65,50,32,100

        C 65,100,70,32,50,60

        D 70,65,100,32,50,60

        E 32,50,100,70,65,60

        F 50,100,70,65,60,32

        此题答案为A。做堆的题,画图为最优解。解析如下: 

最后 

        对于二叉树基础的理论知识,我们就学习到这里,虽然这些知识相对后面来说简单一点,但别忘记复习。有了这些预备知识才能够更好的理解后面知识。另外对于递归理解还不够的读者一定要去尽可能的去理解,对于二叉树的学习非常重要。今天的学习就结束了,有问题可在评论区交流,也可私信。我们下篇见!

        二叉树对堆的深入理解:CSDN

        对二叉树的深入理解:CSDN

完!

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

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

相关文章

基于FMEA保证汽车电控系统的可靠性

随着汽车技术的飞速发展,电控系统已成为现代汽车的“大脑”,掌控着车辆的方方面面。然而,这一复杂的系统也面临着诸多潜在失效风险,如何确保汽车电控系统的可靠性,成为汽车制造业亟待解决的问题。幸运的是,…

在PyCharm中,不希望新建Python文件自动打开Python控制台

很久没更新水一下 第一步编辑配置 第二步编辑配置模板 第三步取消勾选 第四步确定

老年人健康管理系统项目部署【linux】

老年人健康管理系统项目部署【linux】 前言版权推荐老年人健康管理系统项目部署购买阿里云服务器开发票连接开放端口 安装软件查看状态1更新yum源2安装jdk83安装mysql4上传Mysql数据5安装redis6安装kakfa7安装nginx8运行命令 命令汇总1更新yum源2Jdk8安装3Mysql安装4Mysql数据5…

[JAVASE] String类 StringBuffer类 StringBuilder类

目录 一.String类 1.1 String字符串不可变的原因 1.2 字符串中的比较方法 1.2.1 equals 1.2.2 compareTo 与 compareToIgnoreCase 1.3 字符串中的查找方法 1.3.1 charAt 1.3.2 indexOf 与 lastIndexOf 1.4 字符串中的转换方法 1.4.1 valueOf 1.4.2 toUpperCase 与 to…

Anaconda虚拟环境安装Pybullet

Anaconda虚拟环境安装Pybullet 当直接使用pip install Pybullet的时候出现以下问题: 查看报错信息和CSDN上的许多博客教程,基本都在说与缺少C的依赖有关需要安装几个G的microsoft visual 我尝试使用Conda 包管理器从 conda-forge 通道安装名为 pybulle…

神经网络不确定性综述(Part V)——Uncertainty measures and quality

相关链接: 神经网络不确定性综述(Part I)——A survey of uncertainty in deep neural networks-CSDN博客 神经网络不确定性综述(Part II)——Uncertainty estimation_Single deterministic methods-CSDN博客 神经网络不确定性综述(Part III)——Uncertainty est…

在项目中集成Web端数据库操作:推荐工具一览

在项目中集成Web端数据库操作:推荐工具一览 博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍…

JAVA基础|File,IO流

File类只能对文件本身进行操作,不能读写文件里面存储的数据 IO流就是对文件进行读写的 一. File类 (一)创建对象 import java.io.File;public class FileTest1 {public static void main(String[] args) {// 1. 创建一个File对象&#xff…

将AVI转换为高质量的MPEG方法!

第 1 部分:使用牛学长转码大师将AVI快速转换为MPEG。 牛学长转码大师是市场上第一款可用于将 AVI 转换为 MPEG 而不会造成质量损失的转换器。该工具具有大量功能,使其在用户中如此受欢迎。以下是一些值得一提的功能。 牛学长转码大师的主要特点&#x…

Reddit是什么?跨境独立站卖家如何用Reddit营销?

在互联网时代,社交媒体营销已成为品牌推广的重要手段。Reddit,作为一个充满活力的社区平台,正逐渐受到越来越多跨境独立站卖家的关注。如果你在独立站引流方面遇到瓶颈,不妨了解一下Reddit这个平台。本文将介绍Reddit是什么&#…

计算机电子书籍资源转载分享

这篇会很简略,一个博主的宝藏,被我发现了,而且是去年2023年更新的,里面计算机网络的第八版书籍都有(谢希仁编著) 这是该博主的github上面发布的:zhangyachen/ComputerArchitectureAndCppBooks:…

鸿蒙ArkUI-X跨语言调用说明:【平台桥接开发指南(Android)Bridge API】

arkui-x.bridge.d.ts (平台桥接) 本模块提供ArkUI端和Android或iOS平台端消息通信的功能,包括数据传输、方法调用和事件调用。需配套平台端API使用,Android侧请参考[BridgePlugin],iOS侧参考[BridgePlugin]。 说明: 开发前请熟悉…

Jmeter 安装教程:简单易懂

随着互联网的不断发展,网站和应用程序的性能测试变得越来越重要。Apache JMeter 是一款广泛使用的性能测试工具,它强大且使用广泛,适用于各种性能测试需求。不论你是刚刚接触性能测试的新手,还是一位有经验的测试工程师&#xff0…

通过花生壳对git服务器做内网穿透

很长一段时间内公司的git服务器只能够在公司内网访问,最近出差的同事比较多,通过外网访问git服务器的需求也迫在眉睫,于是选择了贝锐“花生壳”做内网穿透处理。 首先去贝锐官网购买花生壳映射,我选择的是个人标准版本&#xff0c…

内存卡频频提示格式化?数据恢复全攻略

内存卡提示需要格式化 在数字时代,内存卡作为我们存储数据的常用设备,广泛应用于手机、相机、无人机等多种设备中。然而,不少用户在使用过程中会突然遭遇一个令人头疼的问题——内存卡提示需要格式化。这一提示往往伴随着数据的丢失风险&…

采用全自动贴片机来组装和满足回流焊工艺,列产品小,效率高,低输出纹波—— TPVT-W5系列

TPVT-W5系列是一款标准的表面贴装电源模块,完全实现采用全自动贴片机来组装和满足回流焊工艺,大大提高产能和降低人工费用。此系列产品小,效率高,低输出纹波及提供3000V以上的直流电压隔离,SMD封装。

Android framework修改,禁止指定包名的apk安装到设备上(基于Android10.0.0-r41)

文章目录 Android framework修改,禁止指定包名的apk安装到设备上(基于Android10.0.0-r41)1.新增接口提供给上层调用2.在pms中实现新增的接口3.找到preparePackageLI方法。4.测试验证 Android framework修改,禁止指定包名的apk安装到设备上(基于Android10…

钛媒体首发 | 百度沈抖回应大模型价格战:希望大家别再天天拉表格比价格

ITValue “有这个时间,不如去卷场景、卷应用。” 作者|张帅 编辑|盖虹达 首发|钛媒体APP ITValue 钛媒体App 5月28日消息,在2024智能经济论坛上,百度集团执行副总裁、百度智能云事业群总裁沈抖介绍了文心系…

免费,Python蓝桥杯等级考试真题--第16级(含答案解析和代码)

Python蓝桥杯等级考试真题–第16级 一、 选择题 答案:B 解析:(75)//212//26,故答案为B。 答案:B 解析:因为x15,所以range(2,15),i的取值为2-14&a…

Java+mysql酒店管理系统

1.引言 1.1编写的目的 本文档为酒店管理系统需求分析报告,为酒店管理系统的设计的主要依据,主要针对酒店管理系统的概要设计和详细设计人员,作为项目验收的主要依据。 1.2背景 本软件全称为阳光酒店管理系统。 1.3 参考资料 …