数据结构与算法笔记——树(Tree)

【数据结构】树 如果节点为空就返回空,如果该节点的值就是x那就返回该节点的指针,如果该节点的值不是要查找的值那就遍历它的左子树,用tmp1来接收左子树的查找结果,如果tmp1不是空说明在左子树中找到了所以返回tmp1。叶子节点就是该节点的左右子树==NULL ,如果节点为空返回0,如果该节点的左子树和右子树的=空那这个节点就是叶子节点 所以返回1。那最终的返回值就是左子树的叶子节点个数加右子树的叶子结点的个数。先求出左子树的高度,再求出右子树的高度,最终返回的高度就是该节点的左右子树的最大高度+1(自己)。 阅读详情

 什么是树

树的一些概念

根节点、叶子节点、父节点、子节点、兄弟节点,还有节点的高度、深度以及层数,树的高度。

你有没有发现, "树"这种数据结构真的很像我们现实生活中的"树" ,这里面每个元素我们叫作"节点" ;用来连线相邻节点之间的关系,我们叫作"父子关系"。

比如下面这幅图, A节点就是B节点的父节点, B节点是A节点的子节点。 B.C、D这三个节点的父节点是同一个节点,所以它们之间互称为兄弟节点。我们把没有父节点的节点叫作根节点,也就是图中的节点E,我们把没有子节点的节点叫作叶子节点或者叶节点,比如图中的G、H、1、J、叶子书。

                                      

节点的高度 = 叶子节点到节点的最长路径(边数,从下到上)

节点的深度 = 根节点到这个节点所经历的边的个数(从上到下)

节点的层数 = 节点的深度+1

树的高度 = 根节点的高度

                 

层数:数节点,高度从下往上数变数,深度从上往下数变数

二叉树(Binary Tree)

什么是二叉树:

每个节点最多有两个"叉" ,也就是两个子节点,分别是左子节点和右子节点。

         

编号2 的二叉树中,叶子节点全都在最底层,除了叶子节点之外,每个节点都有左右两个于节点,这种二叉树就叫作满二叉树。

编号3 的二叉树中,叶子节点都在最底下两层,最后一层的叶子节点都靠左排列,并且除了最后层,其他层的节点个数都要达到最大,这种二叉树叫作完全二叉树。

 

二叉树的遍历:

  • 前序遍历是指,对于树中的任意节点来说,先打印这个节点,然后再打印它的左子树,最后打印它的右子树。自左右
  • 中序遍历是指,对于树中的任意节点来说,先打印它的左子树,然后再打印它本身,最后打印它的右子树。左自右
  • 后序遍历是指,对于树中的任意节点来说,先打印它的左子树,然后再打印它的右子树,最后打印这个节点本身。左右自

                     

 

二叉查找树

什么是二叉查找树:

二叉查找树是二叉树中最常用的一种类型,也叫二叉搜索树。顾名思义,二叉查找树是为了实现快速查找而生的。不过,它不仅仅支持快速查找一个数据,还支持快速插入、删除一个数据。

二又查找树要求,在树中的任意一个节点,其左子树中的每个节点的值,都要小于这个节点的值,而右子树节点的值都大于这个节点的值。

                         

平衡二叉查找树

什么是平衡二叉查找树:

二叉树中任意一个节点的左右子树的高度相差不能大于1。

                       

常见的平衡二叉查找树:

Splay Tree (伸展树) 、Treap (树堆)等,但是我们提到平衡二叉查找树,听到的基本都是红黑树。

红黑树

红黑树的英文是"Red-Black Tree" ,简称R-B Tree。它是一种不严格的平衡二叉查找树

红黑树的特点:

  • 根节点是黑色的;
  • 每个叶子节点都是黑色的空节点(NIL) ,也就是说,叶子节点不存储数据;
  • 任何相邻的节点都不能同时为红色,也就是说,红色节点是被黑色节点隔开的;
  • 每个节点,从该节点到达其可达叶子节点的所有路径,都包含相同数目的黑色节点;

                     

Oracle - 共享游标、父子游标、硬软解析   一、共享游标的相关概念     1、Oracle Cursor 的说明         Oracle 里的 Cursor 分为 Shared Cursor 和 Session Cursor 两种         Shared Cursor 即共享游标,缓存在 Library Cache 里的 SQL 和 匿名PL/SQL 等可执行对象         Session Cursor 即通过系统... 阅读详情

相关推荐

[数据结构与算法分析] 链表的游标实现

Weiss书中提到了链表的游标实现,什么是游标(Cursor)实现呢? 诸如BASIC和FORTRAN等许多语言都不支持指针。如果需要链表而又不能使用指针,这时我们可以使用游标(cursor)实现法来实现链表。 在链表的实现中有两个重要的特点: 1,数据存储在一组结构体中。每一个结构体包含有数据以及指向下一个结构体的指针。 2,一个新的结构体可以通过调用malloc而从系统全局内存(g

AllZone 1307

数据结构:树(Tree)【详解】

树 一、知识框架 二、考纲内容 树的基本概念 二叉树 二叉树的定义及其主要特征;二叉树的顺序存储结构和链式存储结构;二叉树的遍历;线索二叉树的基本概念和构造 树、森林 树的存储结构;森林与二叉树的转换;树和森林的遍历 树与二叉树的应用 二叉排序树;平衡二叉树;哈夫曼树和哈弗编码 三、树的基本概念 1、树的定义 树是n(n>=0)个结点的有限集。当n = 0时,称为空树。在任意一棵非空树中应满足: 有且仅有一个特定的称为根的结点。 当n>1时,其余节点可分为m(m>

UniqueUnit的博客 23万+

【数据结构基础】树 - 前缀树(Trie Tree)

在计算机科学中,trie,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。一般情况下,不是所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值。Trie 这个术语来自于 retrieval。根据词源学,trie 的发明者 Edward Fredkin 把它读作/ˈtriː/ “tree”。

DeveloperFire的博客 5503

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

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

DreamSun的博客 1万+

Python数据结构之树(Tree)

本文介绍了Python中树(Tree)数据结构的基本概念和常见类型,重点讲解了二叉树和平衡二叉树的实现与应用。内容包括树的基本术语(节点、根节点、叶子节点等)、二叉搜索树(BST)的特点与操作(查找、插入、删除)、树的遍历算法(前序、中序、后序)以及代码实现。此外还详细介绍了平衡二叉树的性质、旋转操作及其在数据库索引等场景的应用,并提供了AVL树的Python实现代码。文章适合需要掌握树结构基础和算法实现的Python开发者。

weixin_50877427的博客 1266

C/C++ tree234树算法详解及源码

Tree234树算法是一种非常高效的数据结构,用于存储和操作有序的数据集合。

希望我的博客,能帮上你解决学习中工作中所遇到的问题 2904

5.[数据结构和算法分析笔记]树 Tree

1.树 Tree定义树是层次化的而非线性的。树是由显示结点间关系的边(edge)相联而成的结点(node)集合。如果树的每个结点都可以有任意数目子结点,则称为一般树。如果树中每个结点的子结点数目不超过n,则称为n叉树。如果树中每个结点只有两个子结点,则称为二叉树。从根开始,沿着连接结点的边从一个结点到另一结点,构成一条路径(path),顺着路径可以到达树中任何一个结点。根和其...

weixin_34392843的博客 157

从PWM到精准电流:双光耦与LM317构建的4-20mA隔离输出方案

本文详细介绍了基于双光耦与LM317的4-20mA隔离输出方案,适用于工业自动化中的PWM信号转换。该方案通过电气隔离和精准电流调节,显著提升抗干扰能力和信号传输精度,同时降低成本60%。文章还分享了电路设计、参数计算及调试经验,为工程师提供实用参考。

weixin_32006655的博客 282

#数据结构与算法学习笔记#PTA17:哈夫曼树与哈夫曼编码 Huffman Tree & Huffman Code(C/C++)

2018.5.16 最近一段时间忙于实验室各种项目和辅导员的各种杂活,间隔了半周没有耐下心学习。导师最近接了一个要PK京东方的项目让我来做总负责,确实是很惊喜了。责任心告诉我不能把工作做水了,但是还是尝试把实权移交给师兄们比较好。 这道题可以说是树这块的压轴题了,无论是代码量还是思维难度都和其他题目不在一个档次。题目意思是给定一个带权的输入序列,和N个与带权输入序列元素相同的编码测试序列,若编...

NJU_ChopinXBP的博客 4714

Debian 11 下用hostapd+dnsmasq搭建WiFi热点:从命令行到实战(避坑指南)

本文详细介绍了在Debian 11系统上,使用hostapd和dnsmasq从命令行搭建稳定WiFi热点的完整实战流程。内容涵盖环境准备、无线网卡AP模式检查、服务深度配置,并重点提供了从服务启动失败到客户端无法上网等常见问题的系统性排错指南,帮助用户避开配置陷阱,成功创建可用的无线接入点。

CAT789的专栏 772

2025ICPC南昌邀请赛题解

2025ICPC南昌邀请赛由XDU和WHU联合出题的ICPC南昌邀请赛,榜单显示8题金、6题银、5题铜。

weixin_50089904的博客 1958

KD-tree学习笔记

来源:在ICP算法中,提到在目标点云中寻找若干特征点,然后利用K-D tree寻找这些特征点在参考点云中的最近点。此步骤目的是减少泛时间代价O(logNx) 如上图(a),我们先对待识别的物体的图像进行SIFT特征点的检测和特征点的描述,然后得到了SIFT特征点集合。接下来生成物体目标描述要做的就是对特征点集合进行数据组织,形成一种特殊的表示,其作用是为了加速特征点匹配的过程。所谓的

krystalcui 769

存内计算路线再获加持,清华存内芯片登Science

通过这种方法,可以比较有效的控制二氧化铪忆阻层中的微观变化,以及内部的温度和电场,使得器件具有非常优异的电学特性,而且可以在工厂里大规模生产,推动了高性能忆阻器阵列的诞生。团队搭建了全硬件构成的完整存算一体系统,如下图7所示,在系统里集成了多个忆阻器阵列,并在该系统上高效运行了卷积神经网络算法,成功验证了图像识别功能,证明了存算一体架构全硬件实现的可行性,并且成功实现了以更小的功耗和更低的硬件成本完成复杂的计算[6]。根据测试,在一般神经网络中权重更新的最后阶段,调整步长非常接近0,如图9(C)所示,

PXX12345678的博客 1555

数据结构与算法学习笔记-树和二叉树

声明:本博客仅为本人学习途中做的笔记 采自青岛大学王卓老师的视频教学 主要内容为算法思路,具体代码实现还需修改后才能运行,望各位看官多多包涵,您的点赞与评论是对我最大的肯定! 1.树和二叉树的定义 数据的逻辑结构{线性结构{线性表栈(特殊线性表)队列(特殊线性表)字符串、数组、广义表非线性结构{树形结构图形结构 数据的逻辑结构 \begin{cases} 线性结构\begin{cases} 线性表 \\ 栈(特殊线性表) \\ .

qq_53548177的博客 934

Ubuntu20.04下Docker无缝升级实战指南

本文提供了一份在Ubuntu20.04系统上安全、无缝升级Docker的实战指南。文章详细阐述了升级前的版本检查、数据备份等准备工作,逐步演示了通过APT包管理器进行升级或指定版本安装的操作步骤,并强调了升级后的验证与常见问题回滚方案,确保业务容器平稳过渡。

postgres8guard的博客 478

17、激光切割质量影响因素及优化研究

本文研究了激光切割过程中焦点位置、入射角、激光功率、切割速度和气体压力等因素对切割质量的影响,采用响应面方法(RSM)和Box-Behnken设计,基于三种不同喷嘴对SS 304不锈钢进行实验。通过建立切缝宽度比和条纹深度的回归模型,并结合方差分析验证模型有效性,深入分析各参数对切割质量的影响机制。研究发现喷嘴结构差异显著影响参数作用趋势,尤其在切割速度和气体压力响应上表现明显。最终通过多目标优化确定最小激光功率、适中切割速度和最大气体压力为最优组合,显著提升切割质量,为实际生产提供了理论依据和技术支持。未

grape的博客 131

数据结构---树(Tree)

在数据结构中,是一种层次结构的数据结构,由节点(node)组成,其中每个节点通过边(edge)与其他节点连接。树是一种非线性的数据结构,广泛用于表示具有层级关系的数据。常见的树包括二叉树、平衡树、红黑树、B树等。:树中的基本元素,包含数据和指向子节点的指针(或引用)。:连接树中两个节点的连接线。:树的顶层节点,没有父节点。:某个节点的下级节点。:某个节点的上级节点。:没有子节点的节点。:树中某个节点到根节点的路径长度。:树中某个节点到其最深叶节点的最长路径长度。:树的某个节点及其所有后代节点构成的树。

weixin_44929475的博客 3697

S32K144 UDSdoCAN 升级刷写实现笔记

本篇旨在描述如何开发“车规级”的软件升级程序,通过在S32K144平台上实现基于UDSdoCAN的刷写升级功能,带你一步步建立安全升级的“工程思维”,在这里既能收获经验还能获得工程源码、测试脚本,助你起飞,避坑提速!

汽车电子软件领域知识分享 811

数据结构笔记:R树

R树可以看作B树再高维空间的扩展。它很好的解决了在高维空间搜索等问题。采用了B树分割空间的思想,并在添加、删除操作时采用合并、分解结点的方法,保证树的平衡性R树就是一棵用来存储高维数据的平衡树。

qq_40206371的博客 2866

【AI面试】 Python 的装饰器

Python装饰器是一种高阶函数,用于在不修改原函数代码的情况下增强其功能。它通过@语法糖接收目标函数作为参数,并返回一个包含额外逻辑(如日志、缓存、权限验证等)的新函数。装饰器的核心价值在于代码复用和解耦,符合开闭原则,典型应用包括性能分析、权限控制等场景。例如,@timer_decorator可自动为函数添加耗时统计功能。本质上,@decorator等价于func = decorator(func),实际调用的是装饰器返回的包装函数。进阶技巧包括使用@functools.wraps保留原函数元信息。装饰

钱多多先森 184

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

FP Tree算法原理

作为一个挖掘频繁项集的算法,Apriori算法需要多次扫描数据,I/O是很大的瓶颈。为了解决这个问题,FP Tree算法(也称FP Growth算法)采用了一些技巧,无论多少数据,只需要扫描两次数据集,因此提高了算法运行的效率。下面我们就对FP Tree算法做一个总结。 1. FP Tree数据结构 为了减少 I/O 次数,FP Tree算法引入了一些数据结构来临时存储数据。这个数据结构包括三...

莫罗列科夫斯基先生的博客 6027

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

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

C++数据结构之:树Tree

it人员无论是使用哪种高级语言开发东东,想要更高效有层次的开发程序的话都躲不开三件套:数据结构,算法和设计模式。数据结构是相互之间存在一种或多种特定关系的数据元素的集合,即带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系,分为逻辑结构和存储结构。此系列专注讲解数据结构数组、链表、队列、栈、树、哈希表、图,通过介绍概念以及提及一些可能适用的场景,并以C++代码简易实现,多方面认识数据结构,最后为避免重复造轮子会浅提对应的STL容器。本文介绍的是树Tree。

weixin_45068267的博客 1158

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

tree234树的算法实现

        在数学上tree234 树和 红黑树是等价的,所以tree234树可以做为研究红黑树算法的辅助,因为从算法层面和理解层面红黑树要比tree234复杂using System;using System.Collections.Generic;using System.Text;namespace HBDiscover.DSObj.Tree234{ 

bingbing200x的专栏 5541

Tree | 一般树 —— 概念、建立与凹进输出

目录 一、树的基本概念 1、树的结构: 2、树一些名词解释: 二、一般树的实现 1、树的结构 2、树的建立 3、树的输出 打印某个节点的函数如下: 整个树的打印递归实现: End 一、树的基本概念 树是一种数据结构,由n(n>=0)个有限结点组成一个有层次关系的集合。 由于形状像一颗倒立的树而得名。 当n=0时称为空树,非空树的特征如下: (1...

weixin_43787043的博客 2133
上一篇: 数据结构与算法学习笔记——排序:冒泡排序,插入排序,选择排序,归并排序,快速排序,桶排序
下一篇: 数据结构与算法学习笔记——堆 (Heap)
刘彦青-Yannis
博客等级 码龄10年 1万+粉丝 234原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘彦青-Yannis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值