数据结构之树:树的介绍——9

数据结构之树,介绍篇

树的基本定义

  • 介绍:树(tree)是计算机中非常重要的数据结构,它的外形看起来像一颗倒挂着的的树,使用树这种结构可以描述生活中很多的事物,如族谱,单位的组织架构,xml,html的中属性的关系,文件目录,路由协议,某些数据库的索引,机器学习中的决策树等
  • 定义:树是由n(n>=1)个有限结点(node)组成的一个具有层次关系的集合,某些结点之前存在特定的关系,用连线相连,连线称作边(edge),边的上端的结点称为父结点,下面的端点称为子结点
    在这里插入图片描述

树的特点

  1. 每个结点有0个或多个子结点
  2. 没有父结点的结点称为根结点
  3. 一个父结点可能有多个子结点
  4. 每个结点及其后代结点也可以看做一棵树,称为当前结点父结点的一颗子树
    在这里插入图片描述

树的相关术语

  • 结点的度:一个结点含有的子树的棵数
  • 叶结点:度为0的结点称为叶结点,也叫做终端结点
  • 分支结点:度不为0的结点称为分支结点,或叫做非终端结点
  • 结点的层次:根结点层次为1,它的直接后继层次为2,以此类推
  • 结点的层序编号:将一棵树的结点按照从上往下,同层次从左往右的顺序,依次使用自然数按顺序编号获得的值
  • 树的度:树中所有结点最大的度,可能是根结点的度也可能不是(如某颗子树存在更多个颗树)
  • 树的高度或深度:树中结点的最大层次
  • 结点的深度:是指对应结点到根结点路径长度(经过的层次)
  • 森林:没有相互直接连接或间接连接关系的树的集合,可称之为森林。(将一棵树的根结点及其边移除得到所有其子树组成的集合,可称为森林)
  • 孩子(子)结点:一个结点的直接后继结点称之为该结点的孩子(子)结点
  • 双亲(父)结点:一个结点的直接前驱结点称之为该结点的双亲(父)结点
  • 兄弟结点:双亲结点相同的结点,互为兄弟结点
  • 子孙:以某节点为根的子树中任一节点都称为该节点的子孙。

树的常见/常用种类

  • 二叉树(Binary tree,区别于B-tree):每个节点最多含有两个子树的树称为二叉树;
  • 完全二叉树(Complete Binary tree):除了最后一层的结点树有可能没有达到饱和外,其他所有层都已经是饱和值,此外,其最后一层的结点会尽量从左往右生成;
  • 满二叉树(Full Binary tree):满二叉树是完全二叉树的一种特殊情况
  • 平衡二叉树(AVL tree,取名于其两个发明者 Adelson-Velsky和Landis):当且仅当任何节点的两棵子树的高度差不大于1的二叉树;
  • 二叉查找树(英语:Binary Search Tree,BST),是一种内存中特殊的数据结构,它允许对存储在其结点的数据进行增删改查,或者用作动态的数据集合,或是通过key查找对应value的查找表;
  • 霍夫曼树(用于信息编码):带权路径最短的二叉树称为哈夫曼树或最优二叉树;
  • B树:一种对读写操作进行优化的自平衡的二叉查找树,能够保持数据有序,拥有多余两个子树。

其中一部分我们会在后续详细介绍

二叉树的性质

  • 性质1: 在二叉树的第i层上至多有2^(i-1)个结点(i>0)
  • 性质2: 深度为k的二叉树至多有2^k - 1个结点(k>0)
  • 性质3: 对于任意一棵二叉树,如果其叶结点数为N0,而度数为2的结点总数为N2,则N0=N2+1;
  • 性质4:具有n个结点的完全二叉树的深度必为 log2(n+1)
  • 性质5:对完全二叉树,若从上至下、从左至右编号,则编号为i 的结点,其左孩子编号必为2i,其右孩子编号必为2i+1;其双亲的编号必为i/2(i=1 时为根,除外)

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

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

相关文章

OpenCV_03 图像的算数操作:图像的加法+图像的混合

1.图像的加法 你可以使用OpenCV的cv.add()函数把两幅图像相加,或者可以简单地通过numpy操作添加两个图像,如res img1 img2。两个图像应该具有相同的大小和类型,或者第二个图像可以是标量值。 注意:OpenCV加法和Numpy加法之间存…

数据结构之二叉树:二叉查找树的先序、中序、后序、层序遍历,Python代码实现——10(续)

数据结构之二叉查找树的代码实现 本节继续对上一节BST的功能实现 在实现之前,先对要实现的功能进行一下简单的介绍 BST的几种常见遍历方式 以一个简化的树为例,一棵树包含根(父)结点和其左子树及右子树: 遍历顺序的先后是指根(父)结点被遍…

OpenCV_04 几何变换:图像缩放+图像平移+图像旋转+仿射变换+透射变换+图像金字塔

1 图像缩放 缩放是对图像的大小进行调整,即使图像放大或缩小。 API cv2.resize(src,dsize,fx0,fy0,interpolationcv2.INTER_LINEAR)参数: src : 输入图像 dsize: 绝对尺寸,直接指定调整后图像的大小 fx,fy: 相对尺寸,将dsize设…

Direct2D教程(九)渲染位图

概述 这篇的标题更确切的说应该叫位图画刷,这样才好和前几篇对应起来。在Direct2D中,位图的渲染也是通过画刷来实现的。 Direct2D中并没有直接操作位图的接口,而是借助WIC(Windows Image Component)来完成的。今天我们…

OpenCV_05 形态学操作:连通性+腐蚀和膨胀+开闭运算+礼帽和黑帽

1 连通性 在图像中,最小的单位是像素,每个像素周围有8个邻接像素,常见的邻接关系有3种:4邻接、8邻接和D邻接。分别如下图所示: 4邻接:像素p(x,y)的4邻域是:(x1,y);(x-1,y)&#xff…

数据结构之二叉树:折纸问题——11

数据结构之二叉树:Python代码解决折纸问题 折纸问题 要求:请把一段纸条竖着放在桌子上,然后从纸条的下边向上方对折1次,压出折痕后展开。此时折痕是凹下去的,即折痕突起的方向指向纸条的背面。如果从纸条的下边向上方…

OpenCV_06 图像平滑:图像噪声+图像平滑+滤波

1 图像噪声 由于图像采集、处理、传输等过程不可避免的会受到噪声的污染,妨碍人们对图像理解及分析处理。常见的图像噪声有高斯噪声、椒盐噪声等。 1.1 椒盐噪声 椒盐噪声也称为脉冲噪声,是图像中经常见到的一种噪声,它是一种随机出现的白…

数据结构之堆:堆的介绍与python实现——12

堆的简单实现与代码实现 堆的定义 在定义堆(heap)之前,先回顾一下完全二叉树的定义: 完全二叉树:除了最后一层的结点有可能没有达到最大值外,其它层的结点值都达到最大值,此外最后一层的叶子…

OpenCV_07 直方图:灰度直方图+直方图均衡化

1 灰度直方图 1.1 原理 直方图是对数据进行统计的一种方法,并且将统计值组织到一系列实现定义好的 bin 当中。其中, bin 为直方图中经常用到的一个概念,可以译为 “直条” 或 “组距”,其数值是从数据中计算出的特征统计量&…

OpenCV_08 边缘检测:Sobel检测算子+Laplacian算子+Canny边缘检测

1 原理 边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。图像属性中的显著变化通常反映了属性的重要事件和变化。边缘的表现形式如下图所示: 图像边缘检测大幅度地减少了数据量,并且剔除了可以…

数据结构之堆:堆的排序,Python代码实现——13

堆的排序,使用Python代码实现 上一节对堆进行了简单的实现,但是实现的堆只是部分有序(父结点大于子结点,子结点之间无序) 接下来我们实现对堆的所有元素进行升序排序 排序过程 实现步骤: 构造堆;得到堆顶元素,这个…

数据结构之优先队列:优先队列的介绍与基础操作实现,Python代码实现——14

优先队列(Priority queue)的介绍 优先队列是计算机中一种抽象的数据结构类,它有着一个类似和队列或者堆的结构,但是其中每个元素额外有一个优先级别在一个优先队列中,一个高优先顺序的元素会先执行与低优先顺序的元素。在它的执行过程中&…

初识--百年孤独

转载于:https://www.cnblogs.com/xmyun/articles/6306290.html

OpenCV_09 模版匹配和霍夫变换:霍夫线检测+霍夫圆检测

1 模板匹配 1.1 原理 所谓的模板匹配,就是在给定的图片中查找和模板最相似的区域,该算法的输入包括模板和图片,整个任务的思路就是按照滑窗的思路不断的移动模板图片,计算其与图像中对应区域的匹配度,最终将匹配度最…

UICollectionView下拉使header放大模糊

模糊主要使用UIVisualEffectView,这只在ios8以后适用 //模糊的遮罩view property(nonatomic,strong) UIVisualEffectView *effectView; property(nonatomic,strong) CollectionviewLayout *layout;CollectionviewLayout *layout [[CollectionviewLayout alloc]init…

数据结构之优先队列:最小索引优先队列,Python代码实现——15

最小索引优先队列(Min index priority queue) 在之前实现的最大优先队列和最小优先队列,他们可以分别快速访问到队列中最大元索和最小元素,但是他们有一 个缺点,就是没有办法通过索引访问已存在于优先队列中的对象,并更新它们。 为了实现这个目的,在优先队列的基础上,学习一种…

OpenCV_10 傅里叶变换:频域滤波+CV的应用

1 傅里叶变换的理解 傅里叶变换是由法国的一位数学家Joseph Fourier在18世纪提出来的,他认为:任何连续周期的信号都可以由一组适当的正弦曲线组合而成。 傅里叶变换是描述信号的需要,它能够反映信号的特征,并可以使用特征值进行量…

OpenCV_11 轮廓检测:图像的轮廓+绘制轮廓+轮廓近似+边界矩形+椭圆拟合+直线拟合

1 图像的轮廓 轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度。轮廓是图像目标的外部特征,这种特征对于我们进行图像分析,目标识别和理解等更深层次的处理都有很重要的意义。 轮廓提…

数据结构之平衡树:2-3查找树的介绍——16

平衡树(AVL tree) 引入 之前学习的树,都不是平衡的,查找时需要一个一个往内比较,一个结点只储存一个值,数据量存储较大,树的深度会非常的深,导致数据查询时效率会十分的低&#xf…

OpenCV_12 图像分割:全阈值分割+自适应阈值分割+Otsu 阈值(大津法)+分水岭算法+GraphCut+GrabCut

1 图像分割 所谓图像分割指的是根据灰度、颜色、纹理和形状等特征把图像划分成若干互不交迭的区域,并使这些特征在同一区域内呈现出相似性,而在不同区域间呈现出明显的差异性。我们先对目前主要的图像分割方法做个概述,后面再对个别方法做详…