二叉树——基础知识详解

news2024/11/19 7:40:21

前言:

        经过前面的学习,我们接下来要开始二叉树的学习,因二叉树有难度,为了方便讲解以及各位的理解,本节知识会分成不同的小节进行学习,在本阶段只学习初阶的二叉树(堆,二叉数基本知识,二叉树的实现以及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.coloradmin.cn/o/1710253.html

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

相关文章

多分支拓扑阻抗匹配

最近测试信号质量,发现在有过冲、振铃等问题的时候大部分硬件工程师喜欢直接调大匹配电阻或者减小驱动电流,虽然这种操作是有效果的,但是我认为应该还可以更严谨的计算下,而不是选几个电阻多次尝试,显得不是很专业。 …

SOLIDWORKS正版一年多少钱 2024版报价

SOLIDWORKS软件作为一款优秀的三维设计工具,以其强大的功能和优质的设计工具,为设计师们提供了前所未有的便利。SOLIDWORKS三维设计软件是一款多科学集成软件,它在产品开发和制造方面发挥着重要作用。 作为整个SOLIDWORKS产品开发解决方案套件…

boost asio异步服务器(2)实现伪闭包延长连接生命周期

闭包 在函数内部实现一个子函数,子函数的作用域内能访问外部函数的局部变量。闭包就是能够读取其他函数内部变量。但是由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成程的性能问题&#x…

Discourse 使用 DiscourseConnect 来进行用户数据同步

我们都知道 Discourse 的用户管理和设置都高度依赖电子邮件。 如果 Discourse 没有设置电子邮件 SMTP 的话,作为管理员是没有办法对用户邮箱进行修改并且通过验证的。 可以采取的办法是通过 Discourse 的 DiscourseConnect 来进行用户同步。 根据官方的说法&…

Golang原生http实现中间件

Golang原生http实现中间件 中间件(middleware):常被用来做认证校验、审计等 大家常用的Iris、Gin等web框架,都包含了中间件逻辑。但有时我们引入该框架显得较为繁重,本文将介绍通过golang原生http来实现中间件操作。全…

vue复习选择题2

1. 下面哪一个方法可以实现判断元素的class属性是否含有pp样式? (A) A. hasClass(“pp”)B. is(“pp”)C. attr(“class”,“pp”)D. toggleClass(“pp”) [!NOTE] 当涉及到在 jQuery 中判断元素的类属性时,下面是各个选项的作用…

2024/5/28 P1247 取火柴游戏

取火柴游戏 题目描述 输入 k k k 及 k k k 个整数 n 1 , n 2 , ⋯ , n k n_1,n_2,\cdots,n_k n1​,n2​,⋯,nk​,表示有 k k k 堆火柴棒,第 i i i 堆火柴棒的根数为 n i n_i ni​;接着便是你和计算机取火柴棒的对弈游戏。取的规则如下&…

AI批量剪辑视频素材,高效混剪快速出片/矩阵发布,一键管理自媒体账号。

今天给大家分享一个超级好用的办公神器。特别是玩矩阵的企业,这款工具高效解决短视频剪辑问题。 这款软件可以帮你快速生产出1000条视频内容,而且还能把内容同步到多个平台账号上,多平台矩阵发布。 这款系统真的太棒了! 不仅操作简单,而且功能超强大。 …

干冰清洗机的清洗原理及应用

干冰清洗机的清洗原理及应用可以详细阐述如下: 一、清洗原理 干冰清洗机的清洗原理主要基于干冰的低温冷冻作用。干冰在常温下会迅速升华,吸收大量的热量,使周围的温度迅速降低。当干冰颗粒通过特殊的干冰清洗机喷射到清洗物体表面时&#…

Python | Leetcode Python题解之第104题二叉树的最大深度

题目: 题解: class Solution:def maxDepth(self, root: TreeNode) -> int:if not root: return 0queue, res [root], 0while queue:tmp []for node in queue:if node.left: tmp.append(node.left)if node.right: tmp.append(node.right)queue tmp…

素数判断的奥秘与编程实践

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、素数定义的深入理解 二、非素数的例子与思考 三、素数判断的编程实现 1. 穷举法判断素…

多语言印度红绿灯系统源码带三级分销代理功能

前端为2套UI,一套是html写的,一套是编译后的前端 后台功能很完善,带预设、首充返佣、三级分销机制、代理功能。 东西很简单,首页就是红绿灯的下注页面,玩法虽然单一,好在不残缺可以正常跑。

SD Flash介绍

作为一家专业生产存储芯片及存储卡的原厂,我们时常收到客户关于SD Flash的各种技术问题。MK米客方德将详细解答关于SD Flash的常见问题,助您更好地了解这一重要存储技术。 SD Flash是一种常见的存储卡技术,广泛应用于各种便携式设备中&#x…

无人机+EasyDSS互联网视频平台:构建秸秆焚烧监控的“天眼”系统

一、方案背景 在每年的夏收时节,秸秆禁烧成为各地政府面临的一项重要任务。随着夏收季节的结束,大量农作物秸秆的处理问题逐渐凸显。一方面农作物种植面积辽阔,禁烧区域面积较大,监管巡逻人员的数量有限,无法全面顾及…

微软提出“Copilot+ PCs”构想,强调本地AI处理;OpenAI暂停ChatGPT语音功能因声音相似争议

🦉 AI新闻 🚀 微软提出“Copilot PCs”构想,强调本地AI处理 摘要:在微软 Build 开发者前瞻大会上,CEO 萨蒂亚・纳德拉介绍了“Copilot PCs”,一种新类 Windows PC,需配备神经处理单元&#xf…

centos7单机安装openstack

前提:如果你使用 VMware 一定要打开 虚拟化,点设置->处理器下面有一些选项,一定要勾选,如下图所示,勾选后,启动系统后使用lscpu查看 virtaulization 是否正确 1.更新yum源: #yum update2.关闭…

2024年,史上最强的数据库资料集合

💨🏹🌀 2024年,史上最强的数据库资料集合 N种数据库的全方位整理: mysql,mariaDB,Percona Server,Redis,RocksDB,Cassandra,CouchDB&#xff0c…

【平渊随笔】我们为什么要复盘?吸取教训,予其惩,而毖后患!

《平渊》 肆 "予其惩,而毖后患" "复盘" 一词源于围棋术语,对弈者完成一局棋后,重新摆局,审视棋局中的优势与失误,看哪些地方下得好,哪些地方下得不好,有没有更优解&#xf…

(四)MySQL 事务

欢迎访问 事务有哪些特性? 事务是由 MySQL 的引擎来实现的,我们常见的 InnoDB 引擎它是支持事务的。 不过并不是所有的引擎都能支持事务,比如 MySQL 原生的 MyISAM 引擎就不支持事务,也正是这样,所以大多数 MySQL 的…

【Java EE】网络原理——HTTP请求

目录 1.认识URL 2.认识“方法(method)” 2.1GET方法 2.1.1使用Fiddler观察GET请求 2.1.2 GET请求的特点 2.2 POST方法 2.2.1 使用FIddler观察POST方法 2.2.2 POST请求的特点 3.认识请求“报头”(header) 3.1 Host 3.2 C…