数据结构——二叉树知识点详解!

引言:本篇博客将详细介绍到数据结构中的又一位大将——二叉树。它也是我们目前学到的第一个非线性的数据结构。并且本章将学到的概念居多,希望大家可以理解并牢记。

更多有关C语言和数据结构知识详解可前往个人主页:计信猫

目录

一,树

1,树的概念

2,树的定义

二,二叉树

1,二叉树的概念

2,特殊的二叉树

Ⅰ ,满二叉树

Ⅱ,完全二叉树

3,二叉树的储存

三,结语


一,树

1,树的概念

        是一种非线性的数据结构,它由n(n>=0)个有限节点组成一个具有层次关系的集合。而在形式上就像一个倒挂的树,根在上,叶在下。如下图,就是一棵树:

        想要真正的了解一棵,那我们还应该继续掌握关于的细枝末节的概念知识。 

父节点/双亲节点                                     子节点/孩子节点

节点的度:某节点所含有的子节点的个数。例如A的度就为2

兄弟节点:具有相同父节点的节点。如B,C就为兄弟节点

叶节点/终端节点:子节点为0的节点。如D,E,F,G,H

堂兄弟节点:父节点处于同一层上的节点。

树的度:所包含的节点中的的最大值。例如这棵树的度就为3

树的高度:树的最大层次(深度)。例如这棵树的高度就为3

森林:互不相交的的集合。

        当然,我们也会遇到两棵比较特殊的,如下:

 此时空树高度就为0,只有根节点的树高度就为1。

        想要成为一棵,也需要同时遵守以下规则:

1,子树之间便可以有相连或者相交的情况出现。

2,除了根节点以外,每一个节点有且仅有一个父节点。

2,树的定义

        对于的定义,则存在一个难点,那就是一个节点的子节点的个数不确定性,导致我们不知道该定义多少个指针变量合适。

        但是,我们可以使用一个方法,叫做左孩子右兄弟定义法来完美地解决这个问题。于是我们如下代码定义一个

struct TreeNode
{int val;struct TreeNode* LeftChild;//左孩子struct TreeNode* RightBrother;//右兄弟
};

        所以有了这个方法,我们就可以很轻松地将如下的使用代码进行表示了。

        而在使用此方法时,我们必须确保左孩子一定是每一层最左边的那一个。于是我们便可以使用如下代码来遍历一棵的某一层。

struct TreeNode*cur=parent->LeftChild;//parent表示根节点
while(cur)
{//……cur=cur->RightBrother;
}

二,二叉树

1,二叉树的概念

        二叉树无非本质上就首先是一棵,所以它拥有的全部概念。其次二叉树的特殊之处就是二叉树的度为2,也就是说一个节点子节点数不可以超过2

那么如下,就是一棵二叉树

       

2,特殊的二叉树

Ⅰ ,满二叉树

        满二叉树的定义就是除了叶节点之外,每一个节点都达到含有了两个子节点二叉树。如下图所示:

        倘若满二叉树的高度为H,那么我们便可以计算出它的节点个数:

Ⅱ,完全二叉树

        完全二叉树则要求,前H-1层满二叉树,最后一层的叶节点从左向右连续。如下图所示:

        而所要求的”连续“的意思其实就是从左到右必须叶节点紧挨着叶节点,不可以有空出来的位置。

那我们举出如下反例,便不是完全二叉树:

3,二叉树的储存

        对于二叉树的储存,我们便是将逻辑结构与物理结构进行分离储存。

逻辑结构:树状结构              

物理结构:数组结构

        利用数组储存二叉树数据的好处就是我们可以使用下标找到某个节点的父节点或者子节点。 

通过下标寻找父/子节点

假设父节点的下标为i:左孩子节点的下标为2*i+1右孩子节点下标为2*i+2

假设子节点的下标为j:不管j为奇数或者偶数,其父节点的下标都为(j-2)/2——因为会涉及到int类型取整操作

注意:若为非完全二叉树,则不存在的节点一定要在数组空出来,不然会导致使用下标寻找父子节点的方法失效

三,结语

        这一篇文章也仅仅只是讲到了二叉树的概念而已,接下来我会尽快更新出二叉树数据结构的应用——堆

        相较于我们以前学到的数据结构就更加的复杂难懂了,如果想要看懂,那么将这篇博客所讲到的知识点,尤其是父子节点下标的寻找烂熟于心就是非常重要的了。希望我们可以一起克服我们所遇到的困难,一起加油!

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

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

相关文章

AIGC行业现在适合进入吗

AIGC行业目前正处于快速发展阶段,市场需求正处于爆发期,上大学网(www.sdaxue.com)认为,对于有兴趣的个人或企业而言,现在可能是一个适合进入的时机,以下是具体的分析,供大家参考! 一、AIGC行业前…

网络安全基础知识

目录 1、什么是防火墙?什么是堡垒主机?什么是DMZ? 2、网络安全的本质是什么? 3、计算机网络安全所面临的威胁分为哪几类?从人的角度,威胁网络安全的因素有哪些? 4、网络攻击和防御分别包括那…

zip file is empty

从下找到报错的jar包。展开这个jar包,看下是否正常,正常的是能够展开看到一些文件夹以及里面的类,如下:如果不正常,就删除这个jar包,同时找到这个jar包在本地maven仓库的地址,也删除掉&#xff…

Java面试八股之Collection和Collections的区别

Java中Collection和Collections的区别 Collection 是一个接口,位于 java.util 包中,它是 Java 集合框架的顶层接口之一,代表了一组对象的集合。Collection 接口定义了所有集合类型(如 List、Set、Queue 等)所共有的基…

LeetCode2352相等行列对

题目描述 给你一个下标从 0 开始、大小为 n x n 的整数矩阵 grid ,返回满足 Ri 行和 Cj 列相等的行列对 (Ri, Cj) 的数目。如果行和列以相同的顺序包含相同的元素(即相等的数组),则认为二者是相等的。 解析 针对题目给出的数量级…

cubemx配置stm32f407VET6实现can通信

背景: 项目上需要把原先的TMC5160电机驱动器替换为购买的电机控制模块(该模块采用canopen通信) 移植canopen的前提是can通信正常,现在添加一下can通信(先用标准帧,250K bit/S的波特率测试) 原理…

其它高阶数据结构②_图(概念+存储+遍历+最小生成树)

目录 1. 图的概念 2. 图的存储结构 2.1 邻接矩阵(后面算法所用) 2.2 邻接表 3. 图的遍历 3.1 BFS广度优先遍历 3.2 DFS深度优先遍历 4. 最小生成树 4.1 Kruskal算法 4.2 Prim算法 本篇完。 1. 图的概念 图是由顶点集合及顶点间的关系组成的一…

重磅!麒麟信安发布CentOS安全加固套件

CentOS Linux 7系统即将在6月30日停服,标志CentOS全部停止更新和维护。党政、金融、能源、通信、交通、公共服务等关键信息基础设施领域已经投运使用的CentOS系统将无法获取官方提供的漏洞修复补丁,此后,CentOS系统将面临巨大的安全风险与危害…

河南广电与LiblibAI签署战略合作协议

5月15日,河南广电科技与LiblibAI战略签约仪式在郑州中原福塔新闻发布厅隆重举行。双方将本着“共商、共享、共建、共赢”原则,基于全面、可持续的战略合作伙伴关系,发挥各自优势,共同聚焦生成式AI领域,围绕内容创作、商…

Java基础教程 - 7 面向对象-1

更好的阅读体验:点这里 ( www.doubibiji.com ) 更好的阅读体验:点这里 ( www.doubibiji.com ) 更好的阅读体验:点这里 ( www.doubibiji.com ) 7 面向对象 面向对象&am…

无人售货奶柜:掘金新零售蓝海,

无人售货奶柜:掘金新零售蓝海, 在日新月异的商业浪潮中,无人奶柜犹如一股清新的创业飓风,正以不可阻挡之势吸引着众多创业者的目光。这股新兴力量以其独到之处和庞大的市场蓝海,预示着一场关于健康、便捷消费方式的深…

【C#】DateTime类型数组含有null?并排序

代码 internal class Program{static void Main(string[] args){List<DateTime?> dateTimes new List<DateTime?> { null,DateTime.MinValue,DateTime.MaxValue};var temp new List<DateTime?> { };dateTimes.Sort();//dateTimes.Reverse();foreach (va…

石碑之谜:滚动机关

描述 在蒙德和璃月的边界地带&#xff0c;有一个被遗忘的神庙&#xff0c;里面有一个奇怪的机关&#xff1a;滚动石碑。小熊必须操作这个112的长方体石碑&#xff0c;使其通过不同的地面环境&#xff0c;最终放置到神秘的符号“O”上&#xff0c;以解开通往宝藏的大门。 石碑…

Edwards爱德华PHM3000培训PPT课件内容可见图片详情

Edwards爱德华PHM3000培训PPT课件内容可见图片详情

SDL系列(一)—— 小白入门

SDL &#xff08; Simple DirectMedia Layer &#xff09; 是一套开放源代码的 跨平台多媒体开发库 &#xff0c;使用 C 语 言写成。 SDL 提供了数种控制图像、声音、输出入的函数&#xff0c;让开发者只要用相同或是相似的 代码就可以开发出 跨多个平台&#xff08; Linu…

618有什么划算的数码产品?4款精选数码好物清单分享,赶紧码住!

随着618购物节慢慢开始&#xff0c;数码产品的大门已经向你敞开&#xff0c;等你来发现里面的各种乐趣。在这个购物的好时节&#xff0c;我们为你准备了一些很不错的数码东西&#xff0c;不管是喜欢新鲜科技的你&#xff0c;还是需要实用小工具的朋友们&#xff0c;这里都有可能…

安卓、iOS、iPad三端搞定,不再剧荒!

哈喽&#xff0c;各位小伙伴们好&#xff0c;我是给大家带来各类黑科技与前沿资讯的小武。 之前给大家推荐过各种看剧姿势&#xff0c;但很多苹果、平板端的小伙伴还是存在更好的需求体验&#xff0c;今天给大家推荐这款可以在安卓、iOS和平板上都能安装使用&#xff0c;不再剧…

2024自学网络安全的三个必经阶段(含路线图)_网络安全自学路线

一、为什么选择网络安全&#xff1f; 这几年随着我国《国家网络空间安全战略》《网络安全法》《网络安全等级保护2.0》等一系列政策/法规/标准的持续落地&#xff0c;网络安全行业地位、薪资随之水涨船高。 未来3-5年&#xff0c;是安全行业的黄金发展期&#xff0c;提前踏入…

基于Django的图书管理系统

文章目录 前言一、页面展示1.登录2.前端页面3.后端页面 总结 前言 本网站调用Django编写了图书管理网站&#xff0c;可以在后端控制书籍&#xff0c;前端进行书籍预览 一、页面展示 1.登录 2.前端页面 3.后端页面 — ![在这里插入图片描述](https://img-blog.csdnimg.cn/dir…

低功耗音频编解码器CJC8990

由工采网代理的CJC8990是一款低功耗音频编解码器&#xff0c;拥有先进的功能并提供高质量音频&#xff0c;非常适合于便携式数字音频应用&#xff0c;支持多种音频数据格式&#xff0c;包括I2S, DSP模式。 产品介绍&#xff1a; 该芯片工作电压&#xff1a;1.5V&#xff5e;3…