【数据结构】树的基本概念 | 入门树以及二叉树必熟知

的学习过程中,二叉树比较重要,但是在学习二叉树之前,得先需要了解到一些数的概念。

树的定义

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

树的性质

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

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

树是递归定义

  • 任何一棵树,都可以被拆成一个根和n(n >= 0)棵子树组成。所以树一定会被归类为递归问题解决。那树的递归问题的返回条件就是,当遇到叶子的时候没有子树了,那么就开始返回。

那么什么是非线性的呢?

  • 简单点来说就是非线性就是逻辑结构上不是线性的,在逻辑结构上不是一个挨着一个,逻辑结构上就是一个倒挂的树。

我们首先要清楚的是数据元素间的相互关系具体应包括3个方面:

  • 数据的逻辑结构;
  • 数据的存储结构;
  • 数据的运算集合。

逻辑结构和物理结构:

  • 逻辑结构就是我们想象出来的;
  • 物理结构是在内存中实在存储结构

而在之前我们所学习的线性表、栈、对、字符串、数组以及广义表都属于线性结构。

这里我们注意一下,数组型结构物理结构与逻辑结构是一致的,在逻辑结构中数组存储是连续的,在物理结构中也是连续的。

但是链表就与数组不同。我们在平时画图的过程中,链表中具有箭头并且每个箭头指向下一个,依次往后,但是在实践中,可能并不是如此的。这些结构都是来自堆上面的。线性表在逻辑结构是连续的,通过每一个箭头,上一个指向下一个,但是在实际过程中并没有箭头,就是上一个存储下一个的地址。

树的相关概念

  • 链表中的节点都是有一个或者固定的指针,例如指向下一个节点的指针
  • 双向链表中,就是有指向前驱指针以及指向后继指针
  • 而在一个节点则是会有很多的指针,指向孩子们。

结点的度

结点的度:一个节点含有的子树的个数称为该结点的度;如A节点的度为6,B节点的度为0。

叶节点或终端结点

叶节点或终端结点:度为0的节点称为叶节点;如上图P/Q/H/I/B/C...等都为叶节点。 

非终端节点或分支节点

非终端节点或分支节点:度不为0的结点;如上图D/E/F/G/J都为非终端节点。

所以一个数可以看做是根、分支节点和叶节点的组合。

双亲节点或父节点

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

孩子节点或子节点

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

一个节点可能即是父节点又是子节点。

在这里,有些地方会叫做“双亲节点”。这里并不是有两个父节点,它仍然只有一个父亲,而是为了歧义译为“父母双亲”。

兄弟节点

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

树的度

树的度:一棵树中,每个结点有个度,最大节点的度称为树的度;如上图:树的度为6。

树的层次

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

树的高度或深度

树的高度或深度:树中节点的最大层次;如上图:层次为4;

数组的下标是从0开始的。

那么高度和深度是从0开始还是1开始?

  • 树的层次,并没有细致的规定,但是建议使用从1开始。

数组下标为什么从0开始呢?

  • 为了方便计算,a[ i ]等价于*( a + i )。

数组与指针的关系是什么?

  • 数组名是首元素的地址。a[ i ]等价于*( a + i ) 。

那么为什么树建议从1开始而不是从0开始呢?

堂兄弟节点

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

节点的祖先

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

子孙

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

森林

森林:有m ( m > 0 ) 棵互不相交的树的集合称为森林;(在以后学习的并查集就是属于森林)。

树,简而言之就是数的概念+人类亲缘关系而进行描述的。

树与非树

树注意:

  • 子树之间不能相交的;
  • 除了根节点外,每个结点有且只有一个父节点;
  • 一棵N个结点的树有N-1条边。

树形结构中,子树之间是不能有交集的,否则就不是树形结构。

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

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

相关文章

SSM整合1

请求参数 (这里的形参数据都是SpringMvc注入的) controller里的方法不是我们来调用的 是由SpringMvc的前端控制器所调用的(前端控制器调用了处理器 由处理器和适配器去调用我们controller里的方法)&#xff0c;controller里的方法叫handler->处理器 SpringMVC的Controller方…

spring boot 热部署

相信小伙伴们在日常的开发中&#xff0c;调试代码时&#xff0c;免不了经常修改代码&#xff0c;这个时候&#xff0c;为了验证效果&#xff0c;必须要重启 Spring Boot 应用。 频繁地重启应用&#xff0c;导致开发效率降低&#xff0c;加班随之而来。有没有什么办法&#xff0…

实现一个计算机

图片&#xff1a; 实现代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>body {padding: 20px;font-family: Arial;}.calc-wrap {width: 300px;bor…

Threejs_13 聚光灯和点光源的使用

聚光灯就如同手电筒一样&#xff0c;点光源就如同一个电灯泡甚至是萤火虫那样。如何使用他们呢&#xff1f; 我们还是一样&#xff0c;先做一个小球和一个平面&#xff0c;用来展示光线。并且加入基本的环境光。 // 做一个球体 const SphereGeometry new THREE.SphereGeomet…

Vue中使用Echarts实现数据可视化

文章目录 引言一、安装Echarts二、引入Echarts三、创建图表容器四、初始化Echarts实例五、配置图表选项和数据六、实现图表更新七、Vue实例代码结语我是将军&#xff0c;我一直都在&#xff0c;。&#xff01; 引言 接着上一篇内容&#xff0c;我将继续分享有关数据可视化的相…

docker安装mysql挂着目录和mysql备份和恢复

第一&#xff0c;镜像拉取&#xff0c;运行镜像并挂载目录&#xff0c;尝试挂bin下&#xff0c;启动不了&#xff0c;不知为啥 docker run --privilegedtrue -itd --namevmysql -p 3306:3306 -v /home/vmysql:/home/vmysql -e MYSQL_ROOT_PASSWORD123456 mysql&#xff08;图…

为何设计师都在用这个原型样机资源网站?

谈论原型样机素材模板&#xff0c;这个话题对设计师来说如同老朋友一般熟悉。设计师们在创作完毕后&#xff0c;为了更淋漓尽致地展示他们的设计成果&#xff0c;通常会将其放置在真实的样机素材模板中。这种原型样机素材可以让设计作品迅速且清晰地呈现在真实环境中。找到一个…

福州大学《嵌入式系统综合设计》实验五:图像裁剪及尺寸变换

一、实验目的 在深度学习中&#xff0c;往往需要从一张大图中裁剪出一张张小图&#xff0c;以便适应网络输入图像的尺寸&#xff0c;这可以通过bmcv_image_crop函数实现。 实践中&#xff0c;经常需要对输入图像的尺寸进行调整&#xff0c;以适用于网络输入图片尺寸&#xff0…

计网(复习自用)

计算机网络 1.概述 1.1概念 含义 计算机网络&#xff1a;是一个将分散的。具有独立功能的计算机系统&#xff0c;通过通信设备和线路连接起来&#xff0c;由功能完善的软件实现资源共享和信息传递的系统。 简单点说&#xff0c;计算机网络是互联的&#xff0c;自治的计算机集…

低成本打造便携式无线网络攻防学习环境

1.摘要 一直以来, 无线网络安全问题与大众的个人隐私息息相关, 例如: 为了节省流量, 连接到一个看似安全的免费WiFi, 在使用过程中泄露自己的各类密码信息甚至银行卡账号密码信息。随着家用智能电器的普及, 家中的各类智能设备连入家里的无线网络, 却突然失灵, 甚至无法正常连…

碳化硅MOS/超结MOS在直流充电桩上的应用-REASUNOS瑞森半导体

一、前言 直流充电桩是新能源汽车直流充电桩的简称&#xff0c;一般也被叫做“快充”。直流充电桩一般与交流电网连接&#xff0c;可作为非车载电动汽车的动力补充&#xff0c;是一种直流工作电源的电源控制装置&#xff0c;可以提供充足的电量&#xff0c;输出电压和电流可以…

Windows日常故障自我排查:用工具eventvwr.msc(事件查看器)分析问题故障

windows故障排查方法一&#xff1a; 工具用法 系统故障问题时&#xff0c;找不到解决方法 首先&#xff0c; 在搜索栏输入&#xff1a; 事件查看器(eventvwr.msc) 打开程序 根据程序找到程序运行的LOG 根据程序Operational筛选出错误日志&#xff1a; 日志中找错误原因&…

itext - PDF模板套打

项目需求&#xff1a;获取列表数据之后直接将数据生成一个pdf。因此需要使用到 itext 对pdf进行直接操作。 环境配置 需要为pdf添加文字域&#xff0c;因此需要安装Adobe Acrobat 准备一个空的PDF文件&#xff0c;如果有现成的模板更好 依赖配置&#xff0c;我们使用itext的7版…

揭示卡尔曼滤波器的威力

一、说明 作为一名数据科学家&#xff0c;我们偶尔会遇到需要对趋势进行建模以预测未来值的情况。虽然人们倾向于关注基于统计或机器学习的算法&#xff0c;但我在这里提出一个不同的选择&#xff1a;卡尔曼滤波器&#xff08;KF&#xff09;。 1960 年代初期&#xff0c;Rudol…

基于H1ve一分钟搭好CTF靶场

写在前面 ◉ ‿ ◉ 上一篇文章给大家详细介绍了基于H1ve搭建CTF靶场&#xff0c;以及过程中可能遇到的报错及解决方法&#xff0c;那么这篇文章&#xff0c;我总结了一下&#xff0c;将不会遇到报错的方法给到大家&#xff0c;但是前提是你的服务器最好是一个全新的哦~~~ 我…

小程序订阅消息

wx.requestSubscribeMessage({tmplIds: [2IdqlWrqSbjAurzIuW8imeK-ftS8gbhYdZ0icdE],success(res) {console.log(res);// 处理用户授权结果},fail(err) {console.error(err);// 处理授权请求失败}});

淡入淡出transition: right 1s

transition: right 1s; //重点直接改变right值 操作过快 这里用该方法实现1s内淡入淡出 达到效果目标

20230511 Windows Ubuntu vscode remote-ssh 连接配置

参考 &#xff1a; VSCode SSH 连接远程ubuntu Linux 主机 VSCode通过Remote SSH扩展连接到内网Ubuntu主机 Ubuntu 安装 sudo apt-get install openssh-server vscode: 安装remote-ssh 插件 连接到服务器IP 免密登录的公钥密钥传递用filezillaUbuntu 和 Windows 文件互传 …

ios(swiftui) 画中画

一、环境 要实现画中画 ios系统必须是 iOS14 本文开发环境 xcode14.2 二、权限配置 在项目导航器中单击项目&#xff0c;然后单击Signing & Capabilities。单击 Capabilit搜索Background Modes&#xff0c;然后双击将其添加为功能。在新添加的Background Modes部分&a…

chatglm3部署使用

chatglm3部署使用 1.部署2.使用3.接入微信4.vue前端 1.部署 1.首先去github下载chatglm3代码。Huggingface下载模型一直失败&#xff0c;所以用阿里的魔塔社区下载。 git clone https://github.com/THUDM/ChatGLM3.git git clone https://www.modelscope.cn/ZhipuAI/chatglm3…