树

B树(也叫B-树)、B+树、B*树 0. 简介 在此声明,B-Tree最正确的翻译应该为B树,而不是B-树,也即并没有B-树的说法,二叉树叫Binary Tree,二叉搜索树叫Binary Search Tree(BST)B树叫Balance Tree,简写为B-Tree (注意是这两个单词连起来的意思,不是减号),B+树是B+ Tree。 1. BST(Binary Search Tree,即二叉搜索树,并不是B树) ... 阅读详情

1.基本概念

树:是n(n>=0)个结点的有限集。在任意一颗非空树种:(1)有且仅有一个特定的称为根的结点;(2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2....Tn,其中每一个集合本身又是一棵树,并且称为根的子树。

度:结点拥有的子树数。

叶节点/终端结点:度为0的结点。

分支结点/非终端结点:度非0的结点。

树的度:结点度的最大值。

树的深度/高度:树中结点的最大层次。

有序树/无序树:树中各节点的各子树从左至右,不能互换的树。否则为无序树。

森林:若干棵互不相交的树的集合。

2.抽象数据类型(ADT)

数据对象:由若干相同数据类型的结点组成的集合

数据关系:由一个根结点和若干子树组成。根节点无前驱,结点下的子树互不相交,任何一棵子树又称为根的子树。

基本操作:

                  InitTree(*T): 构造空树T。

                  DestroyTree(*T): 销毁树T。

                  CreateTree(*T, definition): 按definition构造树T。

                  ClearTree(*T): 清空树。

                  TreeEmpty(T): 验证树是否为空。

                  TreeDepth(T): 返回树的深度。

                  Root(T): 返回树的根结点。

                  Value(T, cur_e): cur_e是树中的一个结点,返回此结点的值。

                  Assign(T,cur_e,value): 将结点cur_e赋值给value。

                  Parent(T,cur_e): 若cur_e不是根节点,则返回结点cur_e的双亲,否则返回空。

                  LeftChild(T,cur_e): 若结点cur_e非叶结点,则返回结点的左孩子,否则返回空。

                  RightSibling(T,cur_e): 若结点cur_e有右兄弟,则返回结点的右兄弟,否则返回空。

                   InsertChild(*T,*p,i,c): 插入c为树T中p指结点的第i棵子树(c与T不相交,1<=i<=所指结点度+1)

                  DeleteChild(*T,*p,i): 删除树T中p指结点的第i棵子树(1<=i<=所指结点度)。

3.树的存储结构

树的存储结构包括双亲表示法、孩子表示法和孩子兄弟表示法。他们都是常用的链表结构。

双亲表示法

在每个结点中附设一个指示器指示双亲结点在链表中的位置。

 //树的双亲存储结构定义
#define MAXTREESIZE 100    
typedef int ElemType;         //元素的数据类型根据实际情况而定,这里假设为int
   
typedef struct Node          //结点结构 
{  
    ElemType data;            //数据域,用于存储结点数据   
    int    parrnt;           //双亲位置                
}PTNode;

typedef struct
{
	PTNode nodes[MAXTREESIZE];   //用数组来存储结点 
	int r,n;                    //r为根节点的位置,n为结点个数 
}PTree;
在这种存储方法中,根节点的双亲位置为-1,其余结点的双亲位置为其双亲在数组中的下标。使用这种方法可以快速地找到结点的双亲。但是若要寻找某结点的孩子,则需要遍历整个结构,对此极为不方便。我们可以增加一个左孩子域。若需要寻找结点的兄弟,则可以增加一个右兄弟域。根据对应的需求增加对应的域。

孩子表示法

将每个结点的孩子结点排列起来,以单链表作为存储结构。n个结点就有n个孩子链表,终端结点的孩子链表为空。每个结点及其对应的孩子链表组成一个线性表,采用顺序存储结构,放进数组中。

//树的孩子存储结构 
typedef struct Childnode      //孩子链表中结点结构 
{
	int   Child;             //该孩子结点在数组中的下标 
	struct Childnode *next;  //指针,指向下一个孩子结点 
}*Childnodes;

typedef struct Node          //顺序存储结构中的结点结构 
{
	ElemType     data;       //结点数据 
	Childnodes   firstchild;  //该结点对应的孩子链表的头指针   
}PTNode;

typedef struct              //树结构 
{
	PTNode nodes[MAXTREESIZE];  //用数组来存储结点
	int r,n;                    //r为根节点的位置,n为结点个数
}PTree;

这样寻找某结点某个孩子或兄弟,只需要遍历对应的孩子链表即可。但是寻找双亲则需要遍历整颗树,因此我们可以结合双亲表示法和孩子表示法,添加一个双亲域,这样的方法称为双亲孩子表示法。改动非常小:

typedef struct Node          //顺序存储结构中的结点结构 
{
	ElemType     data;       //结点数据 
	Childnodes   firstchild;  //该结点对应的孩子链表的头指针
	int    parrnt;           //双亲位置    
}PTNode;

孩子兄弟表示法

在每个结点中设置两个指针域,分别指向该节点的第一个孩子(左孩子)和此结点的右兄弟。

//树的孩子兄弟存储结构
typedef struct Node          //结点结构 
{  
    ElemType      data;           //数据域,用于存储结点数据   
    struct Node  *firstchild;     //指针,指向该结点的第一个孩子 
    struct Node  *rightsib;   //指针,指向该结点第一个右兄弟             
}CSNode,*CSTree;
该方法又称二叉树表示法或二叉链表表示法,此方法将普通的树转换为二叉树,因此可以利用二叉树的特性和算法来处理这棵树。





算法——B树,B-树,B+树,B*树全面解析笔记 算法——B树,B-树,B+树,B*树全面解析笔记 https://zhuanlan.zhihu.com/p/54102723 https://www.cnblogs.com/lianzhilei/p/11250589.html B树 = B-树 B-树,即为B树。因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这是个非常不好的直译,很容易让人产生误解。如人们可能会以为B-树是一种树,而B树又是一种树。而事实上是,B-tree就是指的B树,目前理解B的意思为平衡 B树的出现 阅读详情

相关推荐

数据结构——树

数据结构——树

weixin_47924016的博客 2052

数据结构学习笔记——树

二叉树(Binary Tree)是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。我们先把这棵二叉树简化成叶子结点带权的二叉树,如图6.26所示.其中A表示不及格、B表示及格、C表示中等、D表示良好、E表示优秀。每个叶子的分支线上的数字就是刚才我们提到的五级分制的成绩所占比例数。赫夫曼大叔说,从树中一个结点到另一个结点之间的分支构成两个结点之间的路径,路径上的分支数目称做路径长度。

weixin_43268649的博客 716

新手必看!Cisco Packet Tracer 8.2从安装到完成第一个局域网实验(附常见问题解决)

本文为网络新手提供了Cisco Packet Tracer 8.2的完整入门指南。从官方下载安装、界面熟悉,到核心的拖拽设备、连线、配置IP地址三步操作,手把手教你完成第一个局域网组网实验。文章重点讲解了如何通过Ping命令验证连通性,并附带了连线错误、IP配置不当等常见问题的解决思路,帮助初学者快速上手这款强大的思科模拟器。

android的专栏 869

【数据结构与算法】树(Tree)【详解】

【知识框架】树是n(n>=0)个结点的有限集。当n = 0时,称为空树。有且仅有一个特定的称为根的结点。当n>1时,其余节点可分为m(m>0)个互不相交的有限集T1,T2,…,Tm,其中每个集合本身又是一棵树,并且称为根的子树。显然,树的定义是递归的,即在树的定义中又用到了自身,树是一种递归的数据结构。树的根结点没有前驱,除根结点外的所有结点有且只有一个前驱。树中所有结点可以有零个或多个后继。因此n个结点的树中有n-1条边。

DreamSun的博客 1万+

接入 deepseek 实现AI智能问诊

必须包含user角色,用于传递用户输入。system角色可选,用于设置对话背景。多轮对话需要将历史记录添加到messages中。

weixin_51326478的博客 6541

MATLAB信号处理实战:VMD分解参数调优全指南(附避坑技巧)

本文深入探讨了MATLAB中变分模态分解(VMD)的核心参数调优实战技巧。针对模态数K和惩罚系数α的选择难题,提供了从经验估计、可视化观察到量化指标辅助的渐进式调优框架,并分享了避免过分解与欠分解的实用避坑指南,旨在帮助工程师高效处理非平稳信号,提取清晰的物理特征。

weixin_29079671的博客 144

数据结构(C语言)-树

树一、树1、树的定义2、树的基本术语3、树结构和线性结构的比较二、二叉树1、二叉树的定义2、二叉树的形态与树的形态3、二叉树的性质4 、二叉树的存储结构 一、树 1、树的定义 (1)树的定义 树(Tree)n(n>=0)个有限数据元素的集合。当n=0时称为空树。当n>0时,是非空树,它满足以下两个条件: (2)树的表示方法 树的逻辑结构表示主要有四种:树形表示法,嵌套集合表示法,凹入表示法和广义表表示法等 2、树的基本术语 3、树结构和线性结构的比较 二、二叉树 1、二叉树的定义

czh2637750821的博客 4320

【雷达成像实战】RD、CS、RMA算法对比与Matlab实现:从信号处理到高清成像

本文深入对比了雷达成像中三种核心算法:经典的距离多普勒算法(RD)、基于稀疏重建的压缩感知算法(CS)以及高精度的快速多通道获取算法(RMA)。通过详细的Matlab实战代码,从原理拆解到实现步骤,分析了各自在计算效率、成像精度、数据需求和适用场景上的优劣,为工程选型与算法实践提供了清晰指南。

weixin_29095587的博客 449

算法数据结构基础——树(二叉树)

树(Tree):由 $n \ge 0$ 个节点与节点之间的关系组成的有限集合。当 $n = 0$ 时称为空树,当 $n > 0$ 时称为非空树。之所以把这种数据结构称为「树」是因为这种数据结构看起来就像是一棵倒挂的树,也就是说数据结构中的「树」是根朝上,而叶朝下的。如下图所示。「树」具有以下的特点:有且仅有一个节点没有前驱节点,该节点被称为树的「根节点(Root)」。除了根节点以之,每个节点有且仅有一个直接前驱节点。包括根节点在内,每个节点可以有多个后继节点。

白话机器学习 1862

晶闸管选型参数,结构原理,工艺与注意问题总结

闸管(Thyristor)是一种半导体开关器件,也被称为可控硅整流器(SCR, Silicon Controlled Rectifier)。它可以在高电压和大电流条件下工作,常被用于交流电的控制和整流。本文对晶闸管的工作原理,结构特点,工艺流程,选型参数及设计注意事项进行总结。

fydar的博客 1284

芯片研发完整全流程

芯片研发全流程可分为需求与架构设计、前端逻辑设计、后端物理设计、晶圆制造、封装测试五大阶段,涉及16个核心步骤。研发过程需要多学科交叉协作,包括微电子、物理、材料、计算机等。关键注意事项包括验证优先、工艺约束遵循、可测性设计等。芯片设计需要绘制纳米级精度的物理版图,而非传统工程图纸,需使用专业EDA工具而非KiCad这类PCB设计软件。完整研发流程具有高投入、高风险特点,需严格遵循行业标准和规范。

weixin_44520581的博客 229

B树和B+树

一、BST树到AVL树到B树的简介 1.1 BST树 --- 二叉排序树 特点: 1. 根节点的值大于其左子树中任意一个节点的值 2. 根结点的值小于其右节点中任意一节点的值 3. 这一规则适用于二叉查找树中的每一个节点。 好处: 查询的时间复杂度比链表快,链表的查询时间复杂度是O(n),二叉排序树平均是O(logn)。二叉排序树越平衡,越能模拟二分法,所以越能想二分法的查询的时间复杂度O(logn)。 二叉排序树如下图: 不足: 但是BST树有一个不足的地方,就是如果插.

ZJE 4万+

YOLOv11改进 | 损失函数改进篇 | EIoU、SIoU、WIoU、DIoU、FocusIoU等二十余种损失函数

这篇文章介绍了YOLOv11的重大改进,特别是在损失函数方面的创新。它不仅包括了多种IoU损失函数的改进和变体,如SIoU、WIoU、GIoU、DIoU、EIOU、CIoU,还融合了“Focus”思想,创造了一系列新的损失函数。这些组合形式的损失函数超过了二十余种,每种都针对特定的目标检测挑战进行优化。文章会详细探讨这些损失函数如何提高YOLOv11在各种检测任务中的性能,包括提升精度、加快收敛速度和增强模型对复杂场景的适应性。

Snu77的博客 6195

B树&B+树详解

B树(B-tree)是一种自平衡的树状数据结构,广泛应用于需要高效地插入、删除和查找操作的场景。B树的名称中的“B”代表“平衡(balanced)”,这是因为B树在进行插入和删除操作时,能够保持树的平衡性,即各个分支的深度相对平均。今天就让我们来深入学习一下。

2301_80035594的博客 2591

手把手教你学SOME/IP「1.0•概述」

本文介绍了SOME/IP协议的基本概念和主要特点。SOME/IP全称为"Scalable service-Oriented MiddlewarE over IP",是一种面向服务的车载嵌入式通信协议,支持远程过程调用、事件通知等功能。文章指出SOME/IP是AUTOSAR标准的一部分,在车载以太网架构中处于应用层位置,负责服务调度和通信封装。协议具有可扩展性强、资源消耗低、兼容性好等优势,能满足汽车电子领域对实时性、可靠性的严格要求。同时,文章也说明了SOME/IP的正确书写规范,并解释

nihaoljq2010的博客 679

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

从B树、B+树、B*树谈到R 树

从B 树、B+ 树、B* 树谈到R 树   作者:July、weedge、Frankie。编程艺术室出品。 说明:本文从B树开始谈起,然后论述B+树、B*树,最后谈到R 树。其中B树、B+树及B*树部分由weedge完成,R 树部分由Frankie完成,全文最终由July统稿修订完成。 出处:http://blog.csdn.net/v_JULY_v 。   第一节、B树、B+树、B*...

结构之法 算法之道 66万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

B树、B-树、B+树、B*树 详细总结

B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,如果查询关键字比结点关键字小,就进入左儿子;如果比结点关...

杰哥一号号的博客 5428

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

B树,B-树和B+树、B*树的区别

之前一些概念混淆,现在更正一下。 B树 B-tree树即B树,B即Balanced,平衡的意思。因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这种直译不好,容易产生误解。如人们可能会以为B-树是一种树,而B树又是一种树。事实上,B-tree就是指B树。特此说明。 先介绍一下二叉搜索树: 1.所有非叶子结点至多拥有两...

qq_22613757的博客 1万+

B树、B-树、B+树、B*树简介

B树 (二叉搜索树): 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; 如: B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,如果查询关键字比结点关键字小,就进入左儿子;如果比结...

二十同学 7万+

【转】从B 树、B+ 树、B* 树谈到R 树

从B 树、B+ 树、B* 树谈到R 树   作者:July、weedge、Frankie。编程艺术室出品。 说明:本文从B树开始谈起,然后论述B+树、B*树,最后谈到R 树。其中B树、B+树及B*树部分由weedge完成,R 树部分由Frankie完成,全文最终由July统稿修订完成。 出处:http://blog.csdn.net/v_JULY_v 。   第一节、B树、...

柏拉图工作室-AI学科 1万+

B树、B+树、AVL树、红黑树

binary search tree,中文翻译为二叉搜索树、二叉查找树或者二叉排序树。简称为BST B树        即二叉搜索树:        1.所有非叶子结点至多拥有两个儿子(Left和Right);        2.所有结点存储一个关键字;        3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树;

chlele0105的专栏 2万+

B树、B-树、B+树、B*树都是什么

B树、B-树、B+树、B*树都是什么         今天看数据库,书中提到:由于索引是采用 B 树结构存储的,所以对应的索引项并不会被删除,经过一段时间的增删改操作后,数据库中就会出现大量的存储碎片,这和磁盘碎片、内存碎片产生原理是类似的,这些存储碎片不仅占用了存储空间,而且降低了数据库运行的速度。如果发现索引中存在过多的存储碎片的话就要进行“碎片整理”了,最方便的“碎片整理”

史迪阳的博客 9739

图解:什么是B-树、B+树、B*树

文章目录 1.二叉搜索树 在说B树之前,我们需要先了解一下二叉搜索树 二叉搜索树,顾名思义,是用来搜索的有序树 它具有以下特点: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树。 下边这个就是一棵二叉搜索树 1.1 二叉搜索树的查找 二叉搜索树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中 否则,如果查询关键字比结点关键字小,就进入左儿子 如果比结点关键字大,就进

你好戴先生的博客 3116

B树,B+树,B*树以及R树的介绍

从B 树、B+ 树、B* 树谈到R 树   作者:July、weedge、Frankie。编程艺术室出品。 说明:本文从B树开始谈起,然后论述B+树、B*树,最后谈到R 树。其中B树、B+树及B*树部分由weedge完成,R 树部分由Frankie完成,全文最终由July统稿修订完成。 出处:http://blog.csdn.net/v_JULY_v 。   第一节、B树、B+树、B*

peterchan88的专栏 6752

B树、B+树、B*树

每个结点最多有m棵子树(子结点)根节点最少有一个子树,除根节点外,其他结点至少有[m/2]个子树所有叶节点都在同一层,按从小到大的顺序存放全部关键码,各个叶节点顺序连接有n个子树的结点有n个关键码所有非叶节点可以看成是叶节点的索引,节点中关键码Ki与指向子树的指针Pi构成对子树(即下一层索引块)的索引项(Ki,Pi),Ki是子树中最大的关键码B+ 树是 B 树的变体,也是一种多路搜索树。B*树是 B+ 树的变体,在 B+ 树的非根和非叶子节点再增加指向兄弟的指针B*树定义了非叶子节点。

2302_76977379的博客 1860

B树(B-树 B_树)、B+树、B*树

B树 B-tree树即B树,B即Balanced,平衡的意思。因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这是个非常不好的直译,很容易让人产生误解。如人们可能会以为B-树是一种树,而B树又是另一种树。而事实上是,B-tree就是指的B树。特此说明。 先介绍下二叉搜索树 1.所有非叶子结点至多拥有两个儿子(Left和Right)...

艾斯-李的博客 3560
上一篇: KMP算法
下一篇: 二叉树及其遍历(递归和非递归实现)
PAT-python-zjw
博客等级 码龄10年 381粉丝 408原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值