首页 > 其他分享 >数据结构教程之树

数据结构教程之树

时间:2023-05-13 21:00:29浏览次数:31  
标签:教程 14 之树 二叉树 叫做 数据结构 节点 森林 每个

树大家都见过吧
树木
当然,我们今天说的不是这个树,而是这个
树

这玩意和大自然中的树有啥关系呢

很简单

首先,做一个树的简笔画
树简笔画

然后,在每条树枝的起点和终点画上圆圈,树枝交会的地方也要画
加上圆圈

其次,在圆圈间树枝的地方用直线连接
用线连接

随后,把原来的简笔画去掉,整理一下圆圈,凑得太紧的分开一点,太远的离近一点
整理

最后,上下颠倒一下
颠倒

好了,画完了

让我们看看维基百科上是怎么定义树的

在计算机科学中,树(英语:tree)是一种抽象数据类型(ADT)或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>0)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:

  • 每个节点都只有有限个子节点或无子节点;
  • 没有父节点的节点称为根节点;
  • 每一个非根节点有且只有一个父节点;
  • 除了根节点外,每个子节点可以分为多个不相交的子树;
  • 树里面没有环路(cycle)

是不是看不懂了?

关于树的一些专有名词

  1. 树上面的每个圆圈都叫做节点(Node)
  2. 每个节点上方或斜上方都有且只有一个节点跟他链接(除了最上面的那个),上面的那个节点叫做这个节点的父节点(Parent)
  3. 每个节点下方都有一些节点跟他链接(除了最下方的一堆节点),下面的那些节点叫做这个节点的子节点(child)
  4. 同一个节点的子节点叫做兄弟节点同���节点,简称兄弟同胞(Sibling)
  5. 每个节点上方的所有节点叫做这个节点的祖宗节点祖先节点,简称祖宗祖先(Ancestor)
  6. 下方的所有节点叫做这个节点的子孙节点后代节点,简称子孙后代(Descendant)
  7. 有且只有一个根节点(Root),在原来树根的位置,也就是树的最上方的节点。根节点没有父节点。
  8. 树可以有一至无数个叶子节点(Leaves),在原来树叶的位置,也就是树最下方的一堆节点。叶子节点没有子节点
  9. 一个非叶子节点的节点的子节点的所有子孙节点也可以构成一棵树,叫做这个节点的子树,这个子节点就是该树的根节点。
  10. 树中两个节点有且只有一条路可走,这条路被叫做两节点间的路径,这条路径经过的黑线多少就是这条路径的长度,也叫节点间的距离
  11. 从根节点到叶子节点的路径中,路径长度最长的那根的长度加一就是该树的深度(因为距离是按黑线算的而深度是按节点数算的)
  12. 如果根节点到某些节点的距离相等,那么这些节点在同一层上,这一层的深度就是它到根节点的距离

还看不懂是不是,我们给上图的树编上编号讲解一下
有编号的树[^1]

[^1]注:图中各节点编号是按照层经行编的,即先第一层从左到右,再第二层,第三层……按照这个顺序搜索树的所有节点叫做广度优先搜索,简称广搜(Breadth-First Search,简称BFS)

这棵树的根节点是1号,叶子节点有8、15、10、11、12、13、14七个。
7的子节点最多,有三个,分别为12、13、14。而7的父节点是4号。
去掉1号节点,剩下的节点刚好可以组成一个以2号节点为根节点的树,这棵树就是1号的子树。

这棵树的深度是6,第一层有一个节点:1,第二层是2,第三层有3和4,第四层是5、6、7,第五层是8、9、10、11、12、13、14,其中8、9是兄弟,10、11是兄弟,12、13、14也是兄弟,第六层是15。5、8、9、15是3的子孙,而1、2是3的祖先。

现在基本理解了吧

特殊的树

二叉树

二叉树,顾名思义,就是最多只有两个叉的树。也就是说,每个节点最多只能拥有两个子节点。像之前展示的树就不是二叉树,因为7有三个子节点。删除14后上面的树就是二叉树了。

老规矩,上维基百科

在计算机科学中,二叉树(英语:Binary tree)是每个节点最多只有两个分支(即不存在分支度大于2的节点)的树结构。通常分支被称作“左子树”或“右子树”。二叉树的分支具有左右次序,不能随意颠倒。

因为二叉树最多只有两个子节点,也就是说它每个节点的子节点数只能是0、1、2。因此,我们把二叉树左侧的子节点叫做左孩子(left child),右侧的叫右孩子(right child)

如果这个节点只有一个子节点,在二叉树中也得分左右。二叉树的左右孩子不能颠倒

如下面的二叉树:

二叉树,来自维基共享资源

其中,5没有左孩子,9没有右孩子。他们虽然只有一个子节点,但仍然要在子节点上分出左右。很多使用二叉树的地方左子和右子的含义是有区别的,一定不能颠倒

特殊的二叉树

完全二叉树

完全二叉树指除了倒数第二层以外,其余所有层的节点都有两个子节点,且最下层只有右侧是空的的二叉树,如下图所示:

完全二叉树
完全二叉树

而下图就不是,因为在最下层中间出现了空位。完全二叉树只允许在最右侧出现空位
不是完全二叉树

满二叉树(完美二叉树)

顾名思义,满二叉树就是在完全二叉树的基础上,最下层也全是满的的二叉树。也就是说,满二叉树除了最下层的叶子节点外,其余所有节点都有且仅有两个子节点。如下图所示:

满二叉树

满二叉树是一种特殊的完全二叉树!

关于二叉树,我们暂时说到这里。二叉树还有很多更复杂的东西,我们以后会单独出片文章讲解。

森林

森林其实不是树。顾名思义,森林就是很多棵树在一起,如下图所示:

image

有没有觉得这张图有亿点熟悉?

没错,添加一个2号节点,作为3号和4号的父节点,这个森林就变成一棵树了,就是文章开头的那颗去掉一号。

因此,任何森林都可以添加一个节点作为森林中所有树的父节点,把这个森林转化成一棵树。

森林没太多用处,我们就不多赘述

本期文章到此结束。以后没有球球了,老有人说我这是波兰球,是个P,波兰球哪有个人拟人。由于我这个公众号同时在更新波兰球内容,为了防止给波兰球小白带来误导,以后没有球球了。

标签:教程,14,之树,二叉树,叫做,数据结构,节点,森林,每个
From: https://www.cnblogs.com/eason66-blog/p/tree_1.html

相关文章

  • 【技术分享】ROP技术入门教程
    【技术分享】ROP技术入门教程原文地址:https://ketansingh.net/Introduction-to-Return-Oriented-Programming-ROP/译文仅供参考,具体内容表达以及含义原文为准。 翻译:beswing预估稿费:200RMB投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿 前言不可否认的是,不......
  • Zookeeper详细教程-data01
    Zookeeper详细教程一、Zookeeper介绍1.1什么是zookeeper​ Zookeeper是一个分布式的、高性能的、开源的分布式系统的协调(Coordination)服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的一个重要的组件。它是一个为分布式应用提供一致性服务的软件。1.2zookeeper应用场......
  • 【LeetCode数据结构04】字符串String
    TableofContents双指针344.反转字符串541.反转字符串II剑指Offer05.替换空格151.翻转字符串里的单词剑指Offer58-II.左旋转字符串KMP28.实现strStr459.重复的子字符串Solutions344.反转字符串力扣题目链接思路代码541.反转字符串II......
  • go语言调度gmp数据结构
    go语言调度gmp数据结构g表示goroutine,它是待执行的任务m表示操作系统的线程,它由操作系统的调度器调度和管理p表示处理器,可以把它看作在线程上运行的本地调度器Ggoroutine是go语言调度器中待执行的任务,它在运行时调度器中的地位和线程在操作系统中的地位差不多,但是它占......
  • 电脑串口通讯调试台达VFD-M变频器的方法和教程 所需硬件
    电脑串口通讯调试台达VFD-M变频器的方法和教程所需硬件:USB转485转换头,台达VFD-M变频器。控制效果:通过串口调试助手,modbusrtu通讯方式,控制变频器的正反转,停止,频率设定,及运行数据的读取。发送内容包括串口调试软件,通讯方法和视频教程,plc调试神器。测试变频器modbusrtu通讯功能的有......
  • # ubuntu18.04美化教程
    随记,这是在我美化完ubuntu18.04一段时间后,同学也想要美化教程,所以我凭着记忆来写的,教程中可能会有一些不足的地方,如果你遇到了问题可以在评论区指出,我看到后会尽量回答解决问题效果图如下参考文章Ubuntu18.04桌面美化全攻略_若水似风的博客-CSDN博客_ubuntu美化Ub......
  • 三菱FX3U与台达VFD M变频器通讯教程。 三菱FX3U与台达VFD变
    三菱FX3U与台达VFDM变频器通讯教程。三菱FX3U与台达VFD变频器通讯案例程序全程讲解,有注释。讲解实用,自制视频。并附送程序,有接线方式,设置。闲鱼上其他与我一样的,都是贩卖我的,里面如有不懂之处,一律不做解答咨询。器件:三菱FX3U的PLC,485BD板,台达VFDM变频器,昆仑通态,威纶通触摸屏。功......
  • 数据结构--树和森林
    数据结构--树和森林树和森林森林是m棵互补相交的树的集合.将树去掉根结点可以变成森林,将森林的每个树全部加上根结点可以变成一颗树.1.双亲表示法数据域:存放数据双亲域:存放双亲结点在数组当中的位置.特点:找双亲容易,找孩子难.双亲表示法使用结构体数组存储首先定......
  • C++ OpenCV安装教程
    C++OpenCV编译安装教程环境说明win10+MinGW64+Cmake下载mingw64(版本:12.1.0posix-seh)下载Cmake(版本3.17.5)注:mingw64和cmake下载安装完成后记得把bin目录添加到【环境变量】,如:下载opencv(版本4.6.0,下载后双击exe,选择目录进行解压即可)GitHub加速链接(复制下......
  • MATLAB2022安装教程
    MATLAB2022破解版下载一.下载连接https://pan.baidu.com/s/17OToNAw0w9Vvt-V278nCHw?pwd=kc8f二.解压Crack.rar文件三.安装步骤双击R2022b_Windows.iso加载文件,然后点击里面的setup.exe文件打开后点击右上角高级选项->我有文件安装秘钥->我同意,下一步输入秘钥.txt中的数......