【数据结构】树家族

目录

  • 树的相关术语
  • 树家族
    • 二叉树
      • 霍夫曼树
      • 二叉查找树 BST
      • 平衡二叉树 AVL
      • 红黑树
      • 伸展树
      • 替罪羊树
    • B树
      • B+树
      • B* 树

在这里插入图片描述

当谈到数据结构中的树时,我们通常指的是一种分层的数据结构,它由节点(nodes)组成,这些节点之间以边(edges)相连。树的一个重要特性是它们具有一个根节点(root),它位于树的顶部,并且每个节点都有一个父节点(parent)以及零个或多个子节点(children)。树结构是一种非线性存储结构,存储的是具有“一对多”关系的数据元素的集合。

树的相关术语

根节点(Root):树的顶层节点,它没有父节点,是树的起点。父节点(Parent):一个节点的直接上级节点。子节点(Children):一个节点的直接下级节点。叶子节点(Leaf):没有子节点的节点称为叶子节点,它们位于树的末端。深度(Depth):一个节点的深度指的是从根节点到该节点的唯一路径的边数。高度(Height):树的高度是指树中任意节点的最大深度。子树(Subtree):一个节点及其所有子孙节点构成的集合,也是一个树。节点的度(Degree):一个节点拥有的子节点数目。树的度(Degree of Tree):树中节点的最大度数。层级(Level):根节点在第一层,其子节点在第二层,以此类推。兄弟节点(Siblings):具有相同父节点的节点称为兄弟节点。有序树与无序树:如果树中的节点是按照一定的顺序排列的,那么称它为有序树,否则称为无序树。

树家族

在这里插入图片描述

二叉树

在这里插入图片描述二叉树的任意节点至多包含两棵子树

二叉树遍历:
二叉树的遍历是指从二叉树的根结点出发,按照某种次序依次访问二叉树中的所有结点,使得每个结点被访问一次,且仅被访问一次。二叉树的访问次序可以分为四种:
前序遍历 中序遍历 后序遍历 层次遍历

在这里插入图片描述

满二叉树除了子结点之外的每一个结点都有两个孩子,每一层(当然包含最后一层)都被完全填充。
完全二叉树除了最后一层之外的其他每一层都被完全填充,并且所有结点都保持向左对齐。
严格二叉树除了叶子结点之外的每一个结点都有两个孩了结点。

霍夫曼树

在这里插入图片描述
霍夫曼树的构建过程是基于一个给定的字符集合,每个字符都有一个权值(通常是它在文本中出现的频率)。构建霍夫曼树的目标是使得权值较大的字符在树中的深度相对较小,从而实现了最优前缀编码。霍夫曼编码可以借助霍夫曼树实现。

二叉查找树 BST

在这里插入图片描述

  • 若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值;
  • 若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值;
  • 任意节点的左、右子树也分别为二叉查找树;
  • 没有键值相等的节点。

平衡二叉树 AVL

在这里插入图片描述
平衡二叉树是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树,同时,平衡二叉树必定是二叉搜索树
平衡二叉树是一棵相对平衡的树,它的高度近似于 l o g 2 ( n ) log₂(n) log2(n),其中 n 是节点的数量。
平衡二叉树又称为AVL树,得名于其发明者 Adelson-Velsky 和 Landis。

在这里插入图片描述
AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为1,所以它也被称为高度平衡树。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。
AVL树是一种特殊的BST树,它满足以下额外的条件:

  • 每个结点的左右子树的高度之差的绝对值(平衡因子)最多为1,平衡因子 = | 左子树高度 - 右子树高度 |

在一些情况下,添加删除会打破AVL树的自平衡性。所以 AVL树定义了旋转操作, 在平衡因子大于等于2时, AVL树会旋转来调整树的结构, 来重新满足平衡因子小于2。

AVL树适合用于插入删除次数比较少,但查找多的情况。

红黑树

在这里插入图片描述
红黑树和AVL树一样,也是自平衡二叉查找树
红黑树是每个节点都带有颜色属性的二叉查找树,颜色或红色或黑色。在二叉查找树强制一般要求以外,对于任何有效的红黑树我们增加了如下的额外要求:

  • 节点是红色或黑色。
  • 根节点是黑色。
  • 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
  • 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点

我们构建红黑树的过程是通过逐个插入新节点来完成的,在插入节点时,初始化根节点为黑节点,随后插入子节点时,初始为红色,然后通过修改颜色和旋转节点来完成平衡,最终使一棵子树完成平衡操作。

伸展树

伸展树是二叉查找树,满足左子树的key<=根节点的<=右子树的key的特点。不保证树是平衡的,但各种操作的平摊的复杂度是logn。从效率上上和平衡树的效率差不多。从编码复杂度上伸展树比红黑树和AVL简单了很多。
伸展树的思想:二八原则 ,也就是把那些访问频率高的的字段尽可能移到离根节点近的位置,所以每次访问节点都会通过各种旋转的方法将访问节点旋转到根节点。

在这里插入图片描述

替罪羊树

替罪羊树是计算机科学中,一种基于部分重建的自平衡二叉搜索树。在替罪羊树上,插入或删除节点的平摊最坏时间复杂度是O(log n),搜索节点的最坏时间复杂度是O(log n)。
在非平衡的二叉搜索树中,每次操作以后检查操作路径,找到最高的满足max(size(son_L),size(son_R))>alpha*size(this)的结点,重建整个子树。这样就得到了替罪羊树,而被重建的子树的原来的根就被称为替罪羊节点。

替罪羊树替罪羊树是一棵自平衡二叉搜索树,由ArneAndersson提出。替罪羊树的主要思想就是将不平衡的树压成一个序列,然后暴力重构成一颗平衡的树。


B树

一棵m阶B树(balanced tree of order m)是一棵平衡的m路搜索树。它或者是空树,或者是满足下列性质的树:

  • 根结点至少有两个子女;
  • 每个非根节点所包含的关键字个数 j 满足: ⌈ m 2 ⌉ − 1 < = j < = m − 1 \left \lceil \frac{m}{2} \right \rceil - 1 <= j <= m - 1 2m1<=j<=m1
  • 除根结点以外的所有结点(不包括叶子结点)的度数正好是关键字总数加1,故内部子树个数 k 满足: ⌈ m 2 ⌉ < = k < = m \left \lceil \frac{m}{2} \right \rceil <= k <= m 2m<=k<=m
  • 所有的叶子结点都位于同一层。
    在这里插入图片描述

B树(B-Tree)是一种自平衡的树,它是一种多路搜索树(并不是二叉的),能够保证数据有序。同时它还保证了在查找、插入、删除等操作时性能都能保持在O(logn),为大块数据的读写操作做了优化,同时它也可以用来描述外部存储(支持对保存在磁盘或者网络上的符号表进行外部查找)

B+树

在这里插入图片描述
B+树是在B树的基础上又一次的改进,其主要对两个方面进行了提升,一方面是查询的稳定性,另外一方面是在数据排序方面更友好。

B+树构建规则:

  • B+树的非叶子节点不保存具体的数据,而只保存关键字的索引,而所有的数据最终都会保存到叶子节点。因为所有数据必须要到叶子节点才能获取到,所以每次数据查询的次数都一样,这样一来B+树的查询速度也就会比较稳定,而B树的查找过程中,不同的关键字查找的次数很有可能都是不同的(有的数据可能在根节点,有的数据可能在最下层的叶节点)。
  • B+树叶子节点的关键字从小到大有序排列,左边结尾数据都会保存右边节点开始数据的指针。因为叶子节点都是有序排列的。
  • 非叶子节点的子节点数=关键字数;另一种为非叶节点的关键字数=子节点数-1。这里有两种算法的实现方式,虽然他们数据排列结构不一样,但其原理还是一样的Mysql 的B+树是用第一种方式实现。

B树与B+树的比较:

  1. B+树查询速度更稳定:B+所有关键字数据地址都存在叶子节点上,所以每次查找的次数都相同所以查询速度要比B树更稳定。

  2. B+树天然具备排序功能:B+树所有的叶子节点数据构成了一个有序链表,在查询大小区间的数据时候更方便,数据紧密性很高,缓存的命中率也会比B树高。

  3. B+树全节点遍历更快:B+树遍历整棵树只需要遍历所有的叶子节点即可,而不需要像B树一样需要对每一层进行遍历,这有利于数据库做全表扫描。

B树相对于B+树的优点是,如果经常访问的数据离根节点很近,而B树的非叶子节点本身存有关键字和数据,所以在查询这种数据检索的时候会要比B+树快。

B* 树

B*树又是对B+数的再一次改进。

两者有以下两方面的不同:

  • 首先是关键字个数限制问题,B+树初始化的关键字初始化个数是 ⌈ m 2 ⌉ \left \lceil \frac{m}{2} \right \rceil 2m,b*树的初始化个数为 ⌈ 2 m 3 ⌉ \left \lceil \frac{2m}{3} \right \rceil 32m
  • B+树节点满时就会分裂,而B*树节点满时会检查兄弟节点是否满(因为每个节点都有指向兄弟的指针),如果兄弟节点未满则向兄弟节点转移关键字,如果兄弟节点已满,则从当前节点和兄弟节点各拿出1/3的数据创建一个新的节点出来。

在这里插入图片描述


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

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

相关文章

记一次大数据事故@用了很久的虚拟机环境突然不能联网了

记一次大数据事故用了很久的虚拟机环境突然不能联网了 背景 今天打开自己电脑上的虚拟机环境打算练习一下flink&#xff0c;结果发现vmware里虚拟机能正常开机&#xff0c;也能正常进图os&#xff0c;但是就是不能ping通主机&#xff0c;主机也不能ping通虚拟机 探查 1、…

@Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成

问题 Tag和Operation标签失效 但是Schema标签有效 pom依赖 <!-- 接口文档--><!--引入openapi支持--><dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><vers…

c语言练习(9周)(16~20)

输入12个一位整数&#xff0c;创建二维数组a[3][4]&#xff0c;显示二维数组及各列的平均值&#xff0c;平均值四舍五入到小数点后一位。 题干输入12个一位整数&#xff0c;创建二维数组a[3][4]&#xff0c;显示二维数组及各列的平均值&#xff0c;平均值四舍五入到小数点后一…

RIP路由配置

RIP路由配置步骤与命令&#xff1a; 1.启用RIP路由&#xff1a;router rip 2.通告直连网络&#xff1a;network 直连网络 3.启用RIPv2版本&#xff1a;version 2 4.禁用自动汇总&#xff1a;no auto-summary 注意&#xff1a;静态路由通告远程网络&#xff0c;动态路由通告…

Web - Servlet详解

目录 前言 一 . Servlet简介 1.1 动态资源和静态资源 1.2 Servlet简介 二 . Servlet开发流程 2.1 目标 2.2 开发过程 三 . Servlet注解方式配置 ​编辑 四 . servlet生命周期 4.1 生命周期简介 4.2 生命周期测试 4.3 生命周期总结 五 . servlet继承结构 5.1 ser…

Pytorch 注意力机制解析与代码实现

目录 什么是注意力机制1、SENet的实现2、CBAM的实现3、ECA的实现4、CA的实现 什么是注意力机制 注意力机制是深度学习常用的一个小技巧&#xff0c;它有多种多样的实现形式&#xff0c;尽管实现方式多样&#xff0c;但是每一种注意力机制的实现的核心都是类似的&#xff0c;就…

【Kubernetes部署】二进制部署单Master Kurbernetes集群 超详细

二进制部署K8s 一、基本架构和系统初始化操作1.1 基本架构1.2 系统初始化操作 二、部署etcd集群2.1 证书签发Step1 下载证书制作工具Step2 创建k8s工作目录Step3 编写脚本并添加执行权限Step4 生成CA证书、etcd 服务器证书以及私钥 2.2 启动etcd服务Step1 上传并解压代码包Step…

面试算法51:节点值之和最大的路径

题目 在二叉树中将路径定义为顺着节点之间的连接从任意一个节点开始到达任意一个节点所经过的所有节点。路径中至少包含一个节点&#xff0c;不一定经过二叉树的根节点&#xff0c;也不一定经过叶节点。给定非空的一棵二叉树&#xff0c;请求出二叉树所有路径上节点值之和的最…

分体式离子风刀和整体式离子风刀分别有哪些优缺点

离子风刀是一种利用高速旋转的离子风扇产生的离子风来清洁和干燥物体表面的设备。根据离子风扇的安装方式&#xff0c;离子风刀可以分为分体式离子风刀和整体式离子风刀。下面是它们各自的优缺点&#xff1a; 分体式离子风刀的优点&#xff1a; 安装方便&#xff1a;分体式离子…

电压放大器可用于什么场合

电压放大器是电子器件中常见的一种放大器类型&#xff0c;它可以将输入信号的电压放大到更大的幅度&#xff0c;以满足特定应用的需求。电压放大器广泛应用于多个领域和场合&#xff0c;下面将详细介绍一些使用电压放大器的场景。 音频放大器&#xff1a;音频放大器是电压放大器…

(1)(1.11) LeddarTech Leddar One

文章目录 前言 1 连接到自动驾驶仪 2 参数说明 前言 Leddar One 激光雷达(Leddar One Lidar)是一款重量轻、价格合理的激光雷达&#xff0c;测距 40m&#xff0c;更新频率 70hz&#xff0c;光束为 3 度漫射。有关详细信息&#xff0c;请参阅数据表(datasheet)。 &#xff0…

2023-11-03 LeetCode每日一题(填充每个节点的下一个右侧节点指针 II)

2023-11-03每日一题 一、题目编号 117. 填充每个节点的下一个右侧节点指针 II二、题目链接 点击跳转到题目位置 三、题目描述 给定一个二叉树&#xff1a; struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每个 next 指针&#xff0c;让这个指针…

ArcGIS Pro怎么生成高程点

一般情况下&#xff0c;我们从公开渠道获取到的高程数据都是DEM数据&#xff0c;但是如果要用到CAD等软件内则需要用到高程点&#xff0c;那么如何从DEM提取高程点呢&#xff0c;这里为大家介绍一下生成方法&#xff0c;希望能对你有所帮助。 数据来源 本教程所使用的数据是…

喝酒聚会摇色子小程序源码系统+石头剪刀布+大转盘 带完整的部署教程

来咯来咯&#xff0c;大家都知道摇色子是一种古老而受欢迎的饮酒游戏。在当代年轻人的聚会中&#xff0c;常常都使用摇骰子这种方法来喝酒的。今天罗峰要给大家介绍是一款非常受欢迎的小程序源码系统喝酒聚会摇色子小程序源码系统&#xff0c;还有石头剪刀布&#xff0c;大转盘…

怎么让重要文件自动备份到OneDrive?

可以让文件自动备份到OneDrive吗&#xff1f; OneDrive是比较受欢迎的云存储之一&#xff0c;主要用于存储文件和个人数据&#xff0c;随时随地都能够在多个设备&#xff08;例如Android、台式机或笔记本电脑、平板电脑等&#xff09;之间同步和共享文件。 因此&…

SSL证书在网购中的重要性

近年来&#xff0c;互联网的快速发展使得线上服务范围不断延伸&#xff0c;这其中网络购物更是在全球范围内都呈现上升趋势。然而病毒攻击&#xff0c;网络钓鱼攻击和恶意软件攻击无处不在&#xff0c;网上购物的安全性受到极大威胁。为了保护网络购物的安全&#xff0c;构建可…

Vue项目运行时报错:‘vue-cli-service‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件

报错原因及解决 1.package.json 文件中未定义依赖项vue/cli-service&#xff0c;因此在 npm install 之后并没有安装vue/cli-service 依赖&#xff1b; 解决&#xff1a;项目目录下执行命令&#xff0c;npm i -D vue/cli-service。2.第1步排查后&#xff0c;还是报同样的错&a…

【腾讯云HAI域探秘】利用HAI搭建AI绘画应用,随心所欲,畅享创作乐趣

【腾讯云HAI域探秘】利用HAI搭建AI绘画应用&#xff0c;随心所欲&#xff0c;畅享创作乐趣 1️⃣基于HAI部署的StableDiffusionWebUI快速进行AI绘画&#xff08;1&#xff09;创建并启动StableDiffusion应用服务器&#xff08;2&#xff09;使用StableDiffusionWebUI进行AI绘画…

Dubbo中的负载均衡算法之一致性哈希算法

Dubbo中的负载均衡算法之一致性哈希算法 哈希算法 假设这样一个场景&#xff0c;我们申请一台服务器来缓存100万的数据&#xff0c;这个时候是单机环境&#xff0c;所有的请求都命中到这台服务器。后来业务量上涨&#xff0c;我们的数据也从100万上升到了300万&#xff0c;原…

【蓝桥每日一题]-二分精确(保姆级教程 篇4) #kotori的设备 #银行贷款 #一元三次方程求解

今天讲二分精确题型 目录 题目&#xff1a;kotori的设备 思路&#xff1a; 题目&#xff1a;银行贷款 思路&#xff1a; 题目&#xff1a;一元三次方程求解 思路&#xff1a; 题目&#xff1a;kotori的设备 思路&#xff1a; 求&#xff1a;设备最长使用时间 二分查找&#…