二叉树——基础知识详解

前言:

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

完!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

项目9-网页聊天室3(主界面之用户信息)

1.前端页面 CSS: 如何让img里的图片自适应div,且不变形_img自适应div大小 铺满且不变形-CSDN博客 JavaScript/jQuery 如何改变一个img元素的src属性|极客教程 (geek-docs.com) 2.要求 左上角显示用户的昵称和头像. 3.后端代码 3.1 添加拦截器 3.2 注册拦截器 …

信息学奥赛初赛天天练-14-阅读程序-字符数组、唯一分解定理应用

更多资源请关注纽扣编程微信公众号 1 2019 CSP-J 阅读程序1 (程序输入不超过数组或字符串定义的范围;判断题正确填√,错误填;除特殊说明外,判断题1.5分,选择题3分,共计40分) 1 输入的字符串只能由小写字母或大写字母组…

vue/uniapp 企业微信H5使用JS-SDK

企业微信H5需要我们使用一些SDK方法如获取外部联系人userid 获取当前外部联系人userid 使用SDK前提是如何通过config接口注入权限验证配置 使用说明 - 接口文档 - 企业微信开发者中心 当前项目是vue项目,不好直接使用 引入JS文件,但我们可以安装依赖…

python使用多种方法计算列表元素平方的技巧

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、使用列表推导式进行元素平方 二、使用map函数进行元素平方 三、循环遍历列表进行元素平…

根据Depth Quality Tool的z轴误差值确认相机是否需要进行相机内参校准

下载Depth Quality Tool深度质量验证工具 网盘链接【RealSense SDK v2.55.1】 链接:https://pan.baidu.com/s/1NrlbwNDBUL8wpWfVwbpMwA?pwd2jl0 提取码:2jl0 打开Depth Quality Tool深度质量验证工具 找一面墙作为目标,将摄像头水平对准墙…

ssm超市管理系统java超市进销存管理系统jsp项目

文章目录 超市进销存管理系统一、项目演示二、项目介绍三、系统部分功能截图四、七千字项目文档五、部分代码展示六、底部获取项目源码和七千字项目文档(9.9¥带走) 超市进销存管理系统 一、项目演示 超市进销存管理系统 二、项目介绍 角色分…

007、字符串_命令

字符串类型是Redis最基础的数据结构。首先键都是字符串类型,而且 其他几种数据结构都是在字符串类型基础上构建的,所以字符串类型能为其 他四种数据结构的学习奠定基础。 设置值 set key value [ex seconds] [px milliseconds] [nx|xx] 下面操作设置键…

json web token及JWT学习与探索

JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案 作用: 主要是做鉴权用的登录之后存储用户信息 生成得token(令牌)如下 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwiaWF0IjoxNjg3Njc0NDkyLCJleHAiOjE2ODc3NjA4OTJ9.Y6eFG…

go-zero 实战(1)

环境准备 go 版本 go version go1.22.2 linux/amd64 goctl 安装 goctl(官方建议读 go control)是 go-zero微服务框架下的代码生成工具。使用 goctl 可以显著提升开发效率,让开发人员将时间重点放在业务开发上,其功能有&#xff1a…

crossover玩游戏缺少文件怎么办 为什么游戏打开说缺失文件 crossover支持的游戏列表 CrossOver 提示 X 11 缺失怎么办?

CrossOver是一款类虚拟机软件,可以实现在Mac电脑上运行exe程序。不少Mac用户为了玩游戏,选择使用CrossOver这款软件玩Windows平台的游戏。 一、CrossOver支持的软件多吗 CrossOver是一款基于Wine的兼容工具,它可以让你在Mac或Linux上运行许多…

废品回收小程序:回收市场下的商业机遇

随着当下大众环保意识的提升,回收行业收到了大众的重视,行业快速发展。在互联网信息技术的支持下,“互联网废品回收”得到了发展,依靠各种技术搭建互联网回收平台,连接到居民与商家,让回收变得更加简单高效…

使用nvm管理node多版本(安装、卸载nvm,配置环境变量,更换npm淘宝镜像)淘宝的镜像域名更换

最近 使用nvm 管理 node 的时候发现nvm install node版本号 总是失败。 nvm install 20.12.2Error retrieving "http://npm.taobao.org/mirrors/node/latest/SHASUMS256.txt": HTTP Status 404查看原因,因为淘宝的镜像域名更换,由于 npm.taob…

【C++算法】BFS解决多源最短路问题相关经典算法题

1.01矩阵 既然本章是BFS解决多源最短路问题,也就是说有若干个起点,那我们就可以暴力一点,直接把多源最短路径问题转化成若干个单源最短路径问题,然后将每次的步数比较一下,取到最短的就是最短路径的结果,这…

10. C++异步IO处理库和使用libevent实现高性能服务器

C比较有名的异步IO处理库 libevent 这个主要使用的是epoll。libevthplibuvlibev 我们主要介绍libevent。 libevent重要函数 event_base_new 这个可以对应于epoll_create也就是创建一个实例。还可以初始化libevent所有管理相关的代码。比如说所能用到的队列,栈&a…

【C++】牛客——活动安排

✨题目链接: AB31 活动安排 ✨题目描述 给定𝑛个活动,每个活动安排的时间为[𝑎𝑖,𝑏𝑖)。求最多可以选择多少个活动,满足选择的活动时间两两之间没有重合。 ✨输入描述: 第一行…

cesium绘制区域编辑

npm 安装也是可以的 #默认安装最新的 yarn add cesium#卸载插件 yarn remove cesium#安装指定版本的 yarn add cesium1.96.0#安装指定版本到测试环境 yarn add cesium1.96.0 -D yarn install turf/turf <template><div id"cesiumContainer"></div&…

4.Redis之Redis的通用命令

0.Redis 实战操作 通过 redis-cli 客户端和 redis 服务器交互 涉及到很多的 redis 的命令 【redis 的命令非常非常多!!! 1.掌握常用命令(多操作多练习) 2.学会使用 redis 的文档-> 阅读文档, 是程序猿的基操!! redis 的命令非常非常多!!! 1.掌握常用命令(多操作多练习…

使用 Django 显示表中的数据

1、问题背景 当我们使用 Django 进行 Web 开发时&#xff0c;经常需要在 Web 页面上显示数据库中的数据。例如&#xff0c;我们可能需要在一个页面上显示所有用户的信息&#xff0c;或者在一个页面上显示所有文章的标题和作者。那么&#xff0c;如何使用 Django 来显示表中的数…

手机里装上好用的实用工具,生活办公更轻松

手机里装上好用的实用工具&#xff0c;生活办公才更轻松&#xff01;~ 1.一个木函 安卓手机里的“工具百宝箱”&#xff0c;应用集成了超过100种实用工具&#xff0c;包括单位和汇率换算、查询、OCR图片文字识别、自动文章摘要、图片表格识别和表情制作等等。它提供了全面的多…

防火墙技术基础篇:NAT转发之——Smart NAT(No-PAT和NAPT结合)

防火墙技术基础篇&#xff1a;NAT转发之——Smart NAT&#xff08;No-PAT和NAPT结合&#xff09; 传统的NAT技术在处理大规模网络和复杂应用场景时存在一定的局限性。为了解决这些问题&#xff0c;一种名为Smart NAT的新型网络技术应运而生。本文将详细介绍Smart NAT的概念、原…