数据结构与算法-树

数据结构之树--二叉树/B树/B+树/红黑树及相关算法 树 定义:由一个根结点和m个非根结点组成(m >= 0),其中每个结点下连接n个子结点(n >= 0),非根结点且无子结点的称为叶子结点 树与图的区别在于树中没有一个闭环 二叉树 定义:即每个结点都最多只有两个子结点的树 完全二叉树:高度为k的二叉树,其1~h-1层为满结点,且其h层(叶子结点层)的节点从左至右依次排列(最多2^h-1个,最少0个) 满二叉树:除最后一层外... 阅读详情

一、树的定义

由 n(n>=0)个数据节点组成的集合,有n个元素和n-1条边(Edge),n>0时,有一个根节点(root)和n-1个子节点(child)。

特性:

可以是空树;

n>1时,其余节点又可分为多个子集,每个子集又是一棵树,位于根节点(父节点(parent))左边的是他的左子树,右边的是它的右子树;

如下图,树的数据可以有多层,这叫树的深度 depth,从根开始是第1层;

没有子节点的节点,被称为叶子节点(leaf);

二、二叉树

在树的基础上,每个节点的子节点限定不超过2个,也可以是空树

高度为n,并且总共有2^n -1个节点的是 满二叉树,即每个节点都达到最大数,都是满的。

在二叉树中,最底层从最右边起去掉相邻的若干叶子节点,得到的二叉树,就是完全二叉树

满二叉树必定是完全二叉树,反正完全二叉树不一定是满二叉树。

特性:

1.二叉树的第n层,最多有2^(n-1)个节点,(n从1开始);

2.深度(depth)为n的二叉树最多有2^n-1个节点;

3.二叉树,如果其叶子节点数为k1个,有2个子节点的节点有k2个,那么一定满足 k1=k2+1;

4.包含n个结点的二叉树的高度至少为log2 (n+1);

 


二叉树的存储结构 

顺序存储和链式存储结构,实际开发中链式用的多。

1.首先,顺序存储:是用一组连续的存储单元存放二叉树的所有结点,依据二叉树的性质,完全二叉树和满二叉树采用顺序存储比较合适,把二叉树节点编号和数组下标对应起来,结点的序号可以唯一地反映出结点之间的逻辑关系,这样能够最大可能地节省存储空间。

但是一般普通的二叉树,要采用数组结构存储,只能在其空余位置补充null节点,这样才能当做是完全二叉树,这会导致存储空间的浪费:

1.因此,推荐使用链式存储:每一个结点包含三个关键属性:指向左子树的指针,节点数据,指向右子树的指针;

根据这个,链式存储结构如下:

 为了方便访问结点的父节点(parent),还可以给链表结点增加一个字段parent,用来指向父亲结点。这样每个结点由四个属性组成,结构就变成这样了:

这样的结构表示的二叉树的链式存储结构,称为三叉链表。


二叉树的遍历

分为3种顺序的遍历,分别是前序、中序、和后序遍历,如下图:

遍历步骤图解:

数据结构与算法(十)哈夫曼树 什么叫做哈夫曼树呢?通过一个栗子来看。 我们通常需要按照考试成绩的百分制转换为一个五级分制的成绩,于是得到下面的代码。 if (score < 60) achievement = "不及格"; else if (score < 70) achievement = "及格"; else if (score < 80) achievement = "中等... 阅读详情

相关推荐

数据结构与算法——树和二叉树

1、二叉树:是n个结点的有限集,它或者是空集(n=0),或者由一个根结点及两棵互不相交的分别称作这个根左子树和右子树的二叉树组成。2、特点:(1)每个结点最多有两个孩子(2)子树有左右之分,其次序不能颠倒(3)二叉树可以是空集合,根可以有空的左子树或空的右子树3、二叉树的性质(1)性质1:在二叉树的第i层上至多有个结点(i>=1)(2)性质2:深度为k的二叉树至多有个结点(k>=1)(3)性质3:对任何一棵二叉树T,如果其叶子数为n0,度为2的结点数为n2,则n0=n2+1。

m0_57086839的博客 1204

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

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

DreamSun的博客 1万+

C++实现B+树数据结构与算法

数据结构是组织和存储数据的方式,它决定着数据如何被使用和操作。良好的数据结构能够提高算法的执行效率,降低系统开销。常见的数据结构有线性结构、树形结构、图结构等。

weixin_42591413的博客 800

数据结构与算法总结——树

若将树中每个节点的各子树看成是从左到右有次序的(即不能互换),则称该树为有序树(Ordered Tree)

sinat_39377093的博客 2490

MobaXterm SSH连接失败:深入解析密钥格式错误导致的Software caused connection abort

本文深入解析了MobaXterm SSH连接失败问题,特别是因密钥格式错误导致的'Software caused connection abort'错误。通过分析系统日志和密钥损坏原因,提供了重建SSH主机密钥的详细步骤,包括备份、生成新密钥及权限设置,帮助用户彻底解决连接中断问题。

weixin_29306011的博客 477

ptrade从零开始学习量化交易第166期【ptrade量化策略研究参考--三个因子挖掘思路】

三个因子挖掘思路

GJ57017_wx的博客 1245

《算法系列》之树

树可以说是面试官最喜欢考的类型之一了,因为树作为基础数据结构的同时,实用性也很强,工作中树的数据结构也很常用。

小夏陌的博客 712

Proteus仿真——电压比较器

电压比较器是一种对输入信号进行鉴别与比较的电路,是组成非正弦波发生电路的基本单元电路。常用电压比较器有如下几种:单限比较器、滞回比较器、窗口比较器、集成电压比较器等。

weixin_58745307的博客 3374

算法:什么是树以及树相关概念

树的定义 树是用来处理一对多的数据结构 树是n(n>=0)个节点的有限集 n = 0, 叫做空树 n > 0: 根节点是唯一的 子树的个数没有限制,但是一定是不相交的 树的度 节点拥有的子树数量称为节点的度 。 根据各个节点的度的不同,节点可以分为: 叶子节点(Leaf) [也叫做终端节点]: 度为0的节点 分支节点[也叫做非终端节点]: 度不为0 内部节点: 除了根节点之外,分支节点也叫做内部节点 树的度是树内各节点的度的最大值 节点间关系 当前节

OceanStar的博客 2435

无人驾驶Autoware导读

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对无人驾驶Autoware介绍做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容。

qq_35635374的博客 2397

SPMI总线协议(一)

系统电源管理接口( System Power Management Interface简称SPMI)是一种双线串行接口,用于连接片上系统(SoC)处理器系统的集成电源控制器(PC)与一个或多个电源管理集成电路(PMIC)电压调节系统。SPMI 使系统能够使用单个 SPMI 总线动态调整 SoC 内部电压域的电源和衬底偏置电压。移动设备和其他便携式设计正日益采用系SPMI)协议,实现多主多从系统,根据实时系统需求监测和动态控制供电电压。设计人员可以在系统级实现更低的功率。

qflook的博客 878

算法及数据结构系列 - 树

树结构的应用

gdr12的专栏 1441

机器学习实战——疫情数据分析与预测

机器学习如何做到疫情可视化——疫情数据分析与预测实战 本文将带领大家爬取11个国家以及中国31个省(自治区、直辖市)在2022.0101-2022.06.19的新冠疫情数据。并且采用机器学习模型对2022.6.20-2022.6.30每一天的全国确诊人数、死亡人数、治愈人数进行预测,**做出疫情可视化图形并且求出最终的相关系数R2!...

拥有百余位万粉技术博主、200余位可合作代发博主,私域技术社群规模达千人,商务合作私信 10万+

数据结构与算法-树、二叉树与BST

对于BST而言,插入一个节点主要是要保持其“小-中-大”的逻辑不变,因此插入的节点的逻辑可以从根节点开始,一步步寻找新节点的“最终归宿”,比如在如下BST中,要插入新节点16,最终应该插入到节点17的左孩子处。由于在顺序存储,数据元素之间的逻辑关系是用物理位置来表达的,而二叉树中每一个节点都有一个对应的标号,因此可以使用标号来作为数组的下标,但除非是完美或者完全二叉树,否则会浪费存储空间,如下图所所示。其中8是根节点,14是10的右孩子(因为二叉树是有序树,因此严格区分左右),而13则是14的左孩子。

m0_74147998的博客 962

【OpenFOAM】-olaFlow-算例6- waveFloatingObject

波浪作用下的浮体的刚体运动,属于流固耦合(FSI)问题

ou_no的博客 3537

14、方法论 - 自顶向下与自底向上的结合

本文探讨了如何将自顶向下的规范驱动方法与自底向上的组件构建方法相结合,以形成更加全面的编程理论。通过引入代数法则,简化逻辑关系、提高代码可读性并支持形式化验证,结合实际案例(如智能家居控制系统)展示了如何在设计和实现阶段确保系统的正确性和可靠性。文章还讨论了工具支持的重要性,并提出了未来发展的方向。

lstm7chronicler的博客 173

算法基础—数据结构—树

我们就先从树的储存看起吧。 以字母为例,先建立一个根节点,然后向右创建子节点,并在最后的字符串的结尾处进行标记。 好了,上模板代码(取自AcWing) int son[N][26], cnt[N], idx; // 0号点既是根节点,又是空节点 // son[][]存储树中每个节点的子节点 // cnt[]存储以每个节点结尾的单词数量 // 插入一个字符串 void insert(c...

qq_43638329的博客 254

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

# 基本数据结构与算法(树)

基本数据结构与算法(树) 树的前中后序遍历 定义树的数据结构 class TreeNode { /** * 节点存放的值 */ int val; /** * 左节点 */ TreeNode left; /** * 右节点 */ TreeNode right; TreeNode(int val) { this.val = val; } TreeNod

不积跬步,无以至千里;不积小流,无以成江海 268

计算机控制技术及应用

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

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

数据结构与算法——树与树算法

目录 第六章 树 树的概念 树的术语 树的种类 树的存储与表示 常见的一些树的应用场景 二叉树 二叉树的基本概念 二叉树的性质(特性) 二叉树的节点表示以及树的创建 二叉树的遍历 广度优先遍历(层次遍历) 深度优先遍历 第六章 树 树的概念 每个节点有零个或多个子节点; 没有父节点的节点称为根节点; 每一个非根节点有且只有一个父节点; 除了根节点外,每个子节点可以分为多个不相交的子树; 树的术语 节点的度:一个节点含有的子树的个数称为该节点的度; 树

weixin_46489969的博客 171

数据结构与算法---B+树

再了解B+树之前如果还有不清楚B-树的可以了解先去一下,方便后续理解。 B-Tree B+Tree 简介 B+树是一种树数据结构,通常用于数据库和操作系统的文件系统中。B+树的特点是能够保持数据稳定有序,其插入与修改拥有较稳定的对数时间复杂度。B+树元素自底向上插入,这与二叉树恰好相反。 定义 B+树是B树的一种变形形式,B+树上的叶子结点存储关键字以及相应记录的地址,叶子结点以上各层作为索引使用。一棵m阶的非空B+树满足如下条件: 每个结点至多有m个子女; 除根结点外,每个结点至少有m/2个子结点,.

it浅阳的博客 1179

Python数据结构与算法之树与树算法

树的概念       树(tree)是一种抽象数据类型(ADT)或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是跟朝上,而叶超下的。它具有以下有特点: 每个节点由零个或多个子节点 没有父节点的节...

weixin_44953902的博客 286

数据结构与算法——树与二叉树

树型结构是一类重要的非线性数据结构,其中以树和二叉树最为常用,直观来看,树是以分支关系定义的层次结构。树型结构在客观世界中广泛存在,比如人类社会中的祖辈关系,社会机构组织等等都可以用树来形象表示。树型结构在计算机领域中也得到了广泛应用。

小田是个程序员的博客欢迎你的到来呀~ 2318

算法与数据结构:树

前缀树的增删改查,二叉树的递归套路,二叉树的遍历,序列化和反序列化,搜索二叉树,平衡二叉树,完全二叉树

2401_88007700的博客 770

数据结构与算法:树的结构与应用

本章详细讨论了树的结构和应用,包括二叉树、平衡树、多路树、前缀树等不同类型的树结构及其应用实例。树是一种非常灵活且高效的数据结构,适用于处理具有层次关系的数据。本章还探讨了如何优化树结构以提高性能,包括平衡操作、缓存友好性设计和并行化方法。在下一章中,我们将探讨堆与优先队列的深入剖析,包括堆的各种实现方式、堆排序算法及其在实际系统中的应用。

weidl001的博客 1575

数据结构与算法-前缀树

1 何为前缀树。

figting 477
上一篇: 数据结构与算法-栈和队列
下一篇: 数据结构与算法-图
jcgaogs
博客等级 码龄15年 0粉丝 11原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值