数据结构(C):树的概念和二叉树初见

目录

🍺0.前言

1.树概念及结构

2.认识一棵树

 3.树的表示

3.1树在实际中的运用(表示文件系统的目录树结构) 

4.二叉树 

4.1特殊的二叉树 

4.2二叉树的性质

💎5.结束语


🍺0.前言

        言C之言,聊C之识,以C会友,共向远方。各位博友的各位你们好啊,这里是持续分享数据结构知识的小赵同学,今天要分享的数据结构知识是树的概念和二叉树,在这一章,小赵将会向大家展开聊聊树的概念和二叉树。✊

1.树概念及结构

树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。

有一个特殊的结点,称为根结点,根节点没有前驱结点

除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每一个集合Ti(1<= i <= m)又是一棵结构与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有0个或多个后继

因此,树是递归定义的。

这个定义其实看起来也是很耐看的,如果我们看这个去学习二叉树,我感觉还是很有难度,那么下面小赵就用自己的语言来说一下什么叫树。

先看一下现实中的树:

我们现实中的树往往是长成这样,我们可以这样想一下就是这个根就好像是我们的磁盘,然后每个树根就好像是我们的文件夹,而每个文件里面又是不同的文件夹,这或许就是一个很好的树的概念,这样我们也能发现就是我们的树的结构在我们的计算机中是极其常见的。 至于上面所说的根节点,递归实现等,小赵会在下面和大家一一聊到。

树状结构:

当然这里还有一个特别要注意的地方即:树形结构中,子树之间不能有交集,否则就不是树形结构 。

2.认识一棵树

其实认识一个全新的东西就好像是认识全新的物质,我们要知道他长什么样子,他的每个部位叫什么,那么我们要想认识一棵树也是一样,那么下面我们就来感受一下这棵庞大的树结构。

子树:我们在树结构里的命名是很像我们人类的家族一样的,最上面一层的就好像是我们的祖先,那么子的意思其实就很像儿女的意思,那么对于A的儿女就是BCDEFG而不包含下面的那些HIJK等因为那些已经跨过了子了。

节点的度:一个节点含有的子树的个数称为该节点的度; 如上图:A的为6

叶节点或终端节点(也就是这棵树的最后):度为0的节点称为叶节点; 如上图:B、C、H、I...等节点为叶节点

非终端节点或分支节点:度不为0的节点; 如上图:D、E、F、G...等节点为分支节点

双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点; 如上图:A是B的父节点

孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点; 如上图:B是A的孩子节点

兄弟节点:具有相同父节点的节点互称为兄弟节点; 如上图:B、C是兄弟节点

树的度:一棵树中,最大的节点的度称为树的度; 如上图:树的度为6

节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推

树的高度或深度:树中节点的最大层次; 如上图:树的高度为4(用家族的感觉就是这个家族有几代人)

堂兄弟节点:双亲在同一层的节点互为堂兄弟;如上图:H、I互为兄弟节点

节点的祖先:从根到该节点所经分支上的所有节点;如上图:A是所有节点的祖先

子孙:以某节点为根的子树中任一节点都称为该节点的子孙。如上图:所有节点都是A的子孙

森林:由m(m>0)棵互不相交的树的集合称为森林;

 3.树的表示

树结构相对线性表就比较复杂了,要存储表示起来就比较麻烦了,既然保存值域,也要保存结点和结点之间 的关系,实际中树有很多种表示方式如:双亲表示法,孩子表示法、孩子双亲表示法以及孩子兄弟表示法 等。我们这里就简单的了解其中最常用的孩子兄弟表示法。

typedef int Datatype;
struct node
{struct node* leftchild;//左孩子(左子树)struct node* rightchild;//右孩子(右子数)Datatype data;//当前节点存的数据
};

结构图: 

3.1树在实际中的运用(表示文件系统的目录树结构) 

树在我们计算机中的应用其实感觉和我们之前讲过的文件夹差不多,这里小赵给的是我们的linux的树状目录结构

4.二叉树 

我们在目前的学习中发现树很大,很杂很多的支架,但我们今天是要学习肯定不是一个这么庞大的东西,因为太复杂了,也不好控制,所以我们今天要具体的去研究一个特殊的树,这个树就是二叉树。是一种非常完美的树,就像是我们的正方形一样好看。

现实中二叉树的样子:

我们发现这样的树在现实生活还是非常少的,所以见到这样的树,我们程序员还是非常激动的,毕竟它占据了我们数据结构中非常重要的一部分。

二叉树的概念:

一棵二叉树是结点的一个有限集合,该集合:

1. 或者为空

2. 由一个根节点加上两棵别称为左子树和右子树的二叉树组成

图形:

从上图可以看出:

1. 二叉树不存在度大于2的结点

2. 二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树 

注意:对于任意的二叉树都是由以下几种情况复合而成的:

4.1特殊的二叉树 

1. 满二叉树:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是 说,如果一个二叉树的层数为K,且结点总数是 ,则它就是满二叉树。

说的更简单一点就是满了,没有空的。除了叶节点其他都有两个孩子。

2.完全二叉树:完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K 的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对 应时称之为完全二叉树。 要注意的是满二叉树是一种特殊的完全二叉树。

看了这个其实我还是蛮晕的,但是换个说法可能就好理解一点,就是每棵树首先一定只能有两个子树,那么就像是我们写字一样从左往右写每一行,不能中间留空,中间留一个空挡就不是完全二叉树,因为完全二叉树对左右还是非常敏感的。

4.2二叉树的性质

这里的绝大部分结论是我们可以用数学直接算出来的,这里小赵主要聊聊第三个结论。

首先是当我们只有一个根节点,然后我们开始给它一点一点节点:

各位看这个图的时候会发现,我们在增加度为1的节点的时候好像度为零的节点的个数始终没有变过都是一个,可能我们会觉得好像没什么关系,好我们接着往下。

 这个时候我们把度为1的节点变为度为二的时候我们的发现每增加一个度为二就会增加一个度为零,所以结论就很明显了。度为二的节点诞生一个,度为零的节点就增加一个,再加上原本的度为零的点,那么度为零的节点就等于度为二的节点的个数加一。

💎5.结束语

好了小赵今天的分享就到这里了,如果大家有什么不明白的地方可以在小赵的下方留言哦,同时如果小赵的博客中有什么地方不对也希望得到大家的指点,谢谢各位家人们的支持。你们的支持是小赵创作的动力,加油。

如果觉得文章对你有帮助的话,还请点赞,关注,收藏支持小赵,如有不足还请指点,小赵及时改正,感谢大家支持!!!

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

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

相关文章

卷积模型的剪枝、蒸馏---蒸馏篇--NST特征蒸馏(以deeplabv3+为例)

本文使用NST特征蒸馏实现deeplabv3+模型对剪枝后模型的蒸馏过程; 一、NST特征蒸馏简介 下面是两张叠加了热力图(heat map)的图片,从图中很容易看出这两个神经元具有很强的选择性:左图的神经元对猴子的脸部非常敏感,右侧的神经元对字符非常敏感。这种激活实际上意味着神经…

C++ 日志库 log4cpp 编译、压测及其范例代码 [全流程手工实践]

文章目录 一、 log4cpp官网二、下载三、编译1.目录结构如下2.configure 编译3.cmake 编译 四、测试五、压测源码及结果1.运行环境信息2.压测源码3.压测结果 文章内容&#xff1a;包含了对其linux上的完整使用流程&#xff0c;下载、编译、安装、测试用例尝试、以及一份自己写好…

IT革新狂潮:引领未来的技术趋势

方向一&#xff1a;技术革新与行业应用 当前现状&#xff1a; 量子计算&#xff1a;量子计算的研究正在加速&#xff0c;尽管目前仍处于初级阶段&#xff0c;但其在药物研发、加密技术和材料科学等领域的应用潜力已被广泛认可。 虚拟现实&#xff08;VR&#xff09;与增强现实…

湖南大学OS-2018期末考试(不含解析)

前言 不知道哪里翻出来的一张&#xff0c;看着确实像期末考卷&#xff0c;暂且放一下。或许做过&#xff0c;或许没做过。 总之答案不记得了。做完可以评论区发一下或者找我发出来。 共6道大题。 一、(30%) 1. &#xff08;6%&#xff09; 进程间通信的两种方法分别是什么&…

DRF 跨域问题

【一】说明 CORS&#xff08;跨来源资源共享&#xff0c;Cross-Origin Resource Sharing&#xff09;是一种浏览器技术的规范&#xff0c;旨在解决浏览器同源策略&#xff08;Same-Origin Policy&#xff09;的限制&#xff0c;使得Web服务可以从不同的网域&#xff08;源&…

error Error: certificate has expired

用yarn命令安装依赖的时候遇到报错&#xff1a; 原因&#xff1a;可能是开了服务器代理访问导致ssl安全证书失效 解决方法&#xff1a; 在终端输入 yarn config set "strict-ssl" false -g yarn config set "strict-ssl" false -g 然后再安装依赖就不…

RS2227XN功能和参数介绍及PDF资料

RS2227XN是一款模拟开关/多路复用器 品牌: RUNIC(润石) 封装: MSOP-10 描述: USB2.0高速模拟开关 开关电路: 双刀双掷(DPDT) 通道数: 2 工作电压: 1.8V~5.5V 导通电阻(RonVCC): 10Ω 功能&#xff1a;模拟开关/多路复用器 USB2.0高速模拟开关 工作电压范围&#xff1a;1.8V ~ 5…

【C语言】6.C语言VS实用调试技巧(1)

文章目录 1.什么是 bug2.什么是调试&#xff08;debug&#xff09;&#xff1f;3.Debug 和 Release4.VS调试快捷键4.1 环境准备4.2 调试快捷键 5.监视和内存观察5.1 监视5.2 内存 1.什么是 bug bug现在一般是指在电脑系统或程序中&#xff0c;隐藏着的一些未被发现的缺陷或问题…

Git使用(3):版本管理

一、查看历史 编写一个java类进行测试 选择Git -> Show Git Log查看日志。 第一次修改推送到远程仓库了&#xff0c;所以有origin&#xff08;远程仓库地址&#xff09;&#xff0c;第二次修改只提交到本地仓库所以没有。 二、版本回退 1、本地回退 在要回退的版本上右键&a…

XLSX文件删除了怎么找回?8个恢复方法,太实用了!

U盘作为一种便携的存储设备&#xff0c;随之而来的数据丢失问题也让人头疼。尤其是当U盘中的XLSX文件&#xff08;Excel 2007及以后版本的默认文件格式&#xff09;被误删除或丢失时&#xff0c;如何高效找回这些数据成为了许多人关注的焦点。 本文将从XLSX文件的特性、U盘格式…

深度盘点在当今经济形势下资深项目经理或PMO的或去或从

在当今经济形势下&#xff0c;资深项目经理&#xff08;Project Manager&#xff09;或项目管理办公室&#xff08;PMO&#xff09;的去向和选择受到多种因素的影响。以下是对他们可能面临的或去或从的深度盘点&#xff1a; 1、发展去向 1. 深化专业领域&#xff1a;在经济形势…

Linux程序开发(一):Linux基础入门安装和实操手册

Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&#xff01; 喜欢我的博客的话&#xff0c;记得…

Java面试八股之Java中有哪些原子类,原理是什么

Java中有哪些原子类&#xff0c;原理是什么 AtomicInteger 和 AtomicLong&#xff1a; 用于对整数&#xff08;int&#xff09;和长整数&#xff08;long&#xff09;进行原子操作。 原理&#xff1a;它们内部封装了一个整型或长整型变量&#xff0c;并通过使用Unsafe类提供…

OpenHarmony 实战开发——ArkUI容器类API介绍

容器类&#xff0c;顾名思义就是存储的类&#xff0c;用于存储各种数据类型的元素&#xff0c;并具备一系列处理数据元素的方法。在 ArkUI 开发框架中&#xff0c;容器类采用了类似静态的语言来实现&#xff0c;并通过 NAPI 框架对外提供。通过对存储位置以及属性的限制&#x…

C++map容器关联式容器

Cmap 1. 关联式容器 vector、list、deque、forward_list(C11)等STL容器&#xff0c;其底层为线性序列的数据结构&#xff0c;里面存储的是元素本身&#xff0c;这样的容器被统称为序列式容器。而map、set是一种关联式容器&#xff0c;关联式容器也是用来存储数据的&#xff0…

【开发】模型部署笔记

目录 模型量化 模型量化 1、模型量化优点 低精度模型表示模型权重数值格式为FP16&#xff08;半精度浮点&#xff09;或者INT8&#xff08;8位定点整数&#xff09;&#xff0c;但是目前低精度往往就指代INT8。常规精度模型则一般表示模型权重数值格式为FP32&#xff08;32位…

策略模式详解

策略模式 1 概述 先看下面的图片&#xff0c;我们去旅游选择出行模式有很多种&#xff0c;可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机。 作为一个程序猿&#xff0c;开发需要选择一款开发工具&#xff0c;当然可以进行代码开发的工具有很多&#xff0c;可以选择Idea进…

gitlab webhook触发jenkins任务

配置jenkins 安装gitlab插件 配置jenkins job 选择gitlab webhook触发 在高级中生成token 代码仓设置 新增webhook 配置webhook 测试连接 缺点&#xff0c;不能带gitLab事件的参数&#xff01;&#xff01;&#xff01;

Spark RDD案例:统计网站每月访问量

这个项目利用Spark技术&#xff0c;通过统计网站访问记录中的日期信息&#xff0c;实现了对每月访问量的统计和排序。通过分析数据&#xff0c;我们可以了解到不同月份的网站访问情况&#xff0c;为进一步优化网站内容和推广策略提供数据支持。 使用Spark统计网站每月访问量 …