数据结构:树的概念

embedded/2025/3/3 21:58:12/

树的概念:树是 n n n个结点的有限集合,有且仅有一个被称为根的结点。当 n > 1 n > 1 n>1时,其余结点可分为互不相交的有限集合,其中每个集合本身又是一颗树。

树的属性:

  • 结点层次(深度):从上往下数
  • 结点的高度:从下往上数
  • 树的高度(深度):总共多少层
  • 结点的度:有几个子分支
  • 树的度:各个结点最大的度

有序树:树中结点各子树从左到右是有次序的,不能交换。

无序树:~

森林是 m m m棵互不相交的树的集合。

树的性质:

度为m的树跟m叉树不一样

  • 结点数 = 总度数 + 1
  • m叉树:每个结点最多只能有m个孩子的树
  • 度为m的树第i层至多有 m i − 1 m^{i-1} mi1个结点
  • 高度为h的m叉树至多有 m h − 1 m − 1 \frac {m^{h} - 1} {m - 1} m1mh1个结点
  • 高度h的m叉树至少有h个结点
  • 具有n个结点的m叉树的最小高度为 l o g m ( n ( m − 1 ) + 1 ) log_m(n(m-1) + 1) logm(n(m1)+1)(向上取整)

二叉树

有序树。

  • 满二叉树:一颗高度为h,且含有 2 h − 1 2^h -1 2h1个结点。
  • 完全二叉树:结点编号与满二叉树一一对应。

二叉树性质:

  • 非空二叉树中度为0、1、2的结点个数分别为 n 0 n_0 n0 n 1 n_1 n1 n 2 n_2 n2,则 n 0 = n 2 + 1 n_0 = n_2 + 1 n0=n2+1
  • 二叉树第i层最多有 2 i − 1 2^{i-1} 2i1个结点
  • 完全二叉树高度h为 l o g 2 n + 1 log_2n + 1 log2n+1

二叉树遍历:

  • 先序遍历:根左右
  • 中序遍历:左根右
  • 后续遍历:左右根

二叉排序树

左子树结点值 < 根结点值 < 右子树结点值 的二叉树。

查找效率取决于树的高度,最好O(logn),最坏O(n)

平衡二叉树

树上任一结点的左子树和右子树的高度之差不超过1。

红黑树

红黑树是二叉排序树

  • 每个结点是黑色或红色
  • 根节点是黑色
  • 叶结点(外部结点、NULL结点)是黑色
  • 不存在两个相邻的红结点
  • 从一个结点到任一叶子结点中所含黑结点数目相同

平衡二叉树适用于以查为主;红黑树适用于频繁插入删除。

B树

B树,又称多路平衡查找树,B树中所被允许的孩子个数的最大值称为B树的阶,通常用m表示。

  1. 书中每个结点最多有m棵子树,最多含有m-1个关键字
  2. 若根结点不是终端结点,则至少有两棵子树
  3. 除根结点外的非叶结点至少有 m / 2 m/2 m/2(向上取整)棵子树
  4. 所以的叶结点都出现在同一层次且不带有信息

B+树

m阶的B+树需满足:

  1. 每个分支结点最多有m棵子树
  2. 非叶根节点至少两颗子树,其他每个分支结点至少 m / 2 m/2 m/2(向上取整)棵子树
  3. 结点的子树个数与关键字个数相等
  4. 所有叶结点包含全部关键字及指向相应记录的指针,叶结点中将关键字按大小顺序排序,并且相邻叶结点按大小顺序相互链接起来
  5. 所有分支结点中仅包含它的各个子节点中关键字最大值及指向其子结点的指针

B树和B+树区别:

对比项B树(B-Tree)B+树(B+Tree)
节点存储每个节点存储键值和数据非叶子节点仅存储键值,数据存储在叶子节点
数据存储位置数据可能存储在叶子节点或内部节点数据仅存储在叶子节点
搜索方式可能提前在内部节点找到数据需要遍历到叶子节点才能找到数据
范围查询低效,需在多个节点查找高效,叶子节点通过指针连接,可顺序遍历
磁盘I/O由于数据分布在各层,索引节点存储较少,访问次数较多内部节点仅存键值,索引结构更紧凑,磁盘I/O次数更少
插入删除影响可能会影响所有层级仅影响叶子节点,索引结构较稳定
树的高度相对较高,占用更多磁盘块相对较矮,查询效率更高
应用场景适用于键值对存储,如内存数据库适用于数据库索引和文件系统(如 MySQL InnoDB)

在这里插入图片描述


http://www.ppmy.cn/embedded/169722.html

相关文章

【Vue3】浅谈setup语法糖

Vue3 的 setup 语法糖是通过 <script setup> 标签启用的特性&#xff0c;它是对 Composition API 的进一步封装&#xff0c;旨在简化组件的声明式写法&#xff0c;同时保留 Composition API 的逻辑组织能力。以下是其核心概念和原理分析&#xff1a; 一、<script setu…

C++奇迹之旅:C++的单例模式

文章目录 &#x1f4dd; 一、单例模式的核心原则二、基础实现&#xff08;懒汉式&#xff0c;线程不安全&#xff09;问题&#xff1a; 三、线程安全的懒汉式&#xff08;双重检查锁定&#xff09;特点&#xff1a; 四、饿汉式&#xff08;线程安全&#xff09;特点&#xff1a…

Elasticsearch:使用阿里云 AI 服务进行嵌入和重新排名

作者&#xff1a;来自 Elastic Toms Mura 将阿里云 AI 服务功能与 Elastic 结合使用。 更多阅读&#xff0c;请参阅 “Elasticsearch&#xff1a;使用阿里 infererence API 及 semantic text 进行向量搜索”。 在本文中&#xff0c;我们将介绍如何将阿里云 AI 功能与 Elastics…

江协科技/江科大-51单片机入门教程——P[1-3] 单片机及开发板介绍

前言&#xff1a;本节主要的任务是了解一下 51 单片机和所用的普中51开发板。 目录 一、单片机介绍 二、单片机的应用领域 三、STC89C52单片机 四、命名规则 五、单片机内部拆解 六、单片机内部结构图 七、单片机管脚图 八、单片机最小系统 九、开发板介绍 十、开发…

DeepSeek 助力 Vue3 开发:打造丝滑的悬浮按钮(Floating Action Button)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

51单片机制作彩屏触摸小电子琴STC32G12K128+RA6809+彩屏1024x600

分享一个案例&#xff0c;用51单片机制作彩屏触摸小电子琴&#xff0c;很好玩的一个实验项目&#xff0c;适合广大爱好者探究&#xff01; 硬件需求&#xff1a; 1.STC32G12K128 单片机–我们已制作开发板 2.RA6809/RA8889 液晶控制芯片–我们已制作RA6809开发板 3.彩屏&…

10. 作者去换监控源了,不知道什么原因,zabbix自定义监控无法获取

作者去换监控源了&#xff0c;不知道什么原因&#xff0c;zabbix自定义监控无法获取 通过网络抓包&#xff0c;抓出了两个空值&#xff0c;也没有必要非杠&#xff0c;我先去研究普罗米修了&#xff0c;研究明白了在继续更新&#xff0c;或者又大神知道原因的话也可以给我留言…

未来该如何选择编程语言?

随着技术的飞速发展&#xff0c;编程语言的选择变得越来越重要。无论是初学者还是资深开发者&#xff0c;选择一门适合未来发展的编程语言都至关重要。以下是一些关键因素和建议&#xff0c;帮助您做出明智的选择。 --- #### 1. **明确目标和需求** - **职业方向**&#x…