python数据结构与算法 36 树的基本概念

数据结构与算法领域B树的详细教程 在计算机科学的数据结构与算法领域,高效地组织和管理数据是至关重要的。B树作为一种平衡的多路搜索树,在数据库系统、文件系统等诸多领域有着广泛的应用。本文的目的是全面、深入地介绍B树,涵盖其基本概念、算法原理、数学模型、实际应用等方面,使读者能够系统地掌握B树的相关知识,并能够将其应用到实际的开发中。本文将按照以下结构进行组织:首先介绍B树的核心概念与联系,包括其定义、特点和架构;接着详细讲解B树的核心算法原理和具体操作步骤,并使用Python代码进行实现;然后阐述B树的数学模型和公式,并举例说明; 阅读详情

树

学习目标

  • 理解什么是树及使用方法
  • 学会使用树实现映射
  • 用列表实现树
  • 用类和引用实现树
  • 用递归实现树
  • 用堆实现优先队列

树的例子

前面我们学习过栈和队列这类线性数据结构,并且体验过递归,现在我们学习另一种通用数据结构,叫做树。树在计算机科学中应用广泛,象操作系统、图形学、数据库系统、网络等都要用到树。树和他们在自然界中的表哥——植物树——非常相似,树也有根,有分枝,有叶子。不同之处是,数据结构的树,根在顶上,而叶子在底部。

在开始学习之前,我们来研究几个普通的例子。第一个是生物学上的分级树。图1所示为部分动物的分级树,从这个例子中,我们可以看到树的一些性质。图中显示的第一个性质就是树是分级的,通过分级,形成层级结构,越接近上层的越是一般的共性,底部则是一些具体的东西,顶级的是“界”,第二级是“门”,然后是“纲”,如此等等。不管到分级树的多少层,所有的生物体都是动物界。


图1 生物层级图(看不懂写参考下图)


图1 中文版的生物层级图

你查以从顶部开始,沿着圆圈和箭头组成的路径一直下到底部。在树的每层上,我们都可以问自己一个问题,而且沿着同意的答案走。例如你可以问:“这个动物是脊索动物还是节足动物?”,如果答案是“脊索动物”,那么就沿着脊索动物向下,“这个脊索动物是哺乳动物吗?”如果不是,我们就被困住了(当然,仅限于图中的资料才会困住),如果是在哺乳动物层次上问,“这个哺乳动物是灵长类还是食肉类?”,这种问题可以一直问下去,直到最底层找到动物的名字。

树的另一个性质是,一个节点的所有孩子独立于另一个节点的孩子,例如,猫属有两个孩子,家猫种和狮子种,蝇属也有一个孩子叫家蝇种,但是它的节点不同,与猫属的孩子完全独立。这意味着,我们改变蝇属的孩子不会影响到猫属的孩子。

第三个性质是,每个叶子节点是唯一的,我们可以从动物“界”开始,从根到叶沿着规定的路线唯一地定义每一个物种。例如动物界→脊索动物门→哺乳动物纲→食肉目→猫科→猫属→猫种→家猫

另外一个树形数据结构的例子是我们天天要用的文件系统。文件系统里,目录或文件夹,是树形结构的。图2是unix文件系统的部分结构。


图2 unix文件系统的层级图

文件系统与生物层级系统很相似,也可以沿着一条路径从根到任何目录,路径可以唯一地确定一个子目标和他下面的所有文件。

树的另一个性质,出自它的层次特性,即可以把的一棵子树移动到另一个位置,而不会影响到它下面的层级。例如,我们可以把整个的/etc/从根目录移动到usr/下面,这会将到达httpd的路径从/etc/httpd到/usr/etc/httpd,但不是会影响httpd目录的内容和子目录。

树的最后一个例子是网页,这面是用HTML写的一个简章网页,图3是文中HTML标志的结构关系:

<html xmlns="http://www.w3.org/1999/xhtml"
      xml:lang="en" lang="en">
<head>
    <meta http-equiv="Content-Type"
          content="text/html; charset=utf-8" />
    <title>simple</title>
</head>
<body>
<h1>A simple web page</h1>
<ul>
    <li>List item one</li>
    <li>List item two</li>
</ul>
<h2><a href="http://www.cs.luther.edu">Luther CS </a><h2>
</body>
</html>


图3 HTML标志符的嵌套树形结构

HTML源码和相应的树形结构是另一个层级实例。注意,树中每一个层级也就是HTML标志的嵌套深度。第一对标签是<html></html>,所有其他标签就嵌在它们里面。检查一遍你将在树的每一层级上发现这种性质。


词汇和定义

我们已经看到树的几个例子,现在正式定义树和树的组成。

节点

节点是树的基本元素。它可以有个名字,叫做“键值”。节点也许有更多的附加信息,称为“负载”。在树的算法中,负载不是核心问题,但在实际问题中用到树的时候,负载经常成为关键元素。

边

边是树的另一个基本元素,一条边把两个节点连起来表示他们之间的关系。每个节点(除根节点外)都有一条从其他节点伸过来的入边连着,而且每个节点可能伸出去好几条出边。

根

根是树结构中,唯一没有入边的节点。图2中,/就是树的根。

 路径

路径就是边连接而成的有序列表,元素是节点。例如:哺乳 纲→ 肉食目 → 猫科 → 猫属 → 家猫种就是一条路径。

孩子

“入边来自同一个节点”的节点集合,叫做那个节点的孩子。图2中,log/,spool/和yp/是节点var/的孩子。

父母

一个节点的出边指向其他节点,它就是这些节点的父母。图2中,var/是log/,spool/和yp/的父母。

兄弟

同一父母的节点叫做兄弟。节点etc/和usr/是文件系统树的兄弟。

子树

子树是指一个父母节点和他们的子子孙孙节点和边组成的集合。

叶子节点

叶子节点指没有孩子的节点。如生物层级树中的人和黑猩猩都是叶子节点。

层次

节点的层次,是指从根到这个节点经过的边的数量。例如图1中,Felis的层次是5,根据定义,根节点是0层。

高度

树的高度是指它所有节点层次的最大值。图2中树的高度是2


基本词汇定义完成,我们要对树做一个正式定义。事实上,我们要对做两个正式定义,一个定义包括节点和边,另一个定义是递归定义。递归定义的价值已经被证实。

第一个定义:树包括节点的集合以及连接节点的边的集合。树有以下性质:

  • 一个节点的树称为根节点
  • 任意节点n,除了根节点,都要被另外的唯一节点p所连接,这时p是n的父母。
  • 从根到任意节点有一条唯一的路径
  • 如果每个节点最多有两个孩子,我们把这种树称为二叉树。

图4是第一个定义的树,边用箭头表明连接的方向。



图4 树的定义:节点和边

第二个定义:树或者是一个空集,或者是包括一个根节点和0个或多个子树,每个子树也是树。每个子树的根连到父母树的根。图4所表明的树的递归定义。应用递归定义,我们知道图中至少有4个节点,因为每个三角形代表一个子树,子树中至少包括一个根节点。也许有更多的节点,但是在深入到子树之前无法知晓。








19、掌握Python中的高级数据结构与算法 本文深入探讨了Python中各种高级数据结构及其应用场景,包括列表、元组、字典、集合等基础结构,并介绍了字符串处理、正则表达式、堆、优先队列、链表、树与图等复杂数据结构和相关算法。同时结合实战案例,如社交网络好友推荐系统、文本自动摘要生成、高性能缓存系统等,展示了如何在实际项目中灵活运用这些技术。此外,还展望了数据结构与算法的未来发展趋势,涵盖量子计算、人工智能、分布式系统等多个方向。 阅读详情

相关推荐

27、探索Python中的高级数据结构与算法

本文深入探讨了Python中的高级数据结构与算法,包括列表、元组、字典和集合的基础知识及其高级应用。文章还详细介绍了链表、树(如二叉树和平衡树)、图等复杂数据结构的实现和使用场景,并结合示例代码讲解了常见的搜索和排序算法。此外,文中提供了不同数据结构的选择与优化策略,帮助开发者编写更高效、可维护的代码。

rice5的博客 57

算法入门——搬砖问题

36块砖36人搬,男搬4,女搬3,两个小孩抬1砖,要求一次全搬完,问男、女和小孩各若干?

Lin1shen2shen的博客 3352

20、掌握Python数据结构与算法:从基础到高级

本文深入探讨了Python中的各种数据结构与算法,从基础的列表、元组、字典和集合到高级的栈、队列、链表、树和图,详细介绍了它们的实现方式和应用场景。通过丰富的代码示例和性能分析,帮助开发者掌握如何选择合适的数据结构以提高程序效率,适合希望提升编程技能的Python开发者阅读。

rice5的博客 119

搬砖问题:36块砖,36个人搬,男搬4块,女搬3块,两个小孩搬1块,要求一次搬完,问需要男、女、小孩各多少人?

搬砖问题:36块砖,36个人搬,男搬4块,女搬3块,两个小孩搬1块,要求一次搬完,问需要男、女、小孩各多少人?

weixin_45855434的博客 3693

Python中的数据结构与算法详解.zip

列表是Python中一种可变的序列类型,用于存储多个有序的元素集合。列表中的元素可以是不同类型的数据,比如整数、浮点数、字符串等,甚至可以包含其他列表。列表的定义十分简单,使用方括号[]或者list()函数进行初始化。# 使用方括号定义列表# 使用list()函数# 空列表的初始化在定义空列表时,如果使用[]则直接表示一个空列表。如果使用list()函数,则需传入一个空的元组或者空集合,否则会得到一个包含一个空元组或空集合的列表。

weixin_34618526的博客 932

Mamba-YOLO训练前必看:从环境配置到数据集调整的完整流程

本文详细介绍了Mamba-YOLO目标检测框架的完整训练流程,包括环境配置、数据集优化和模型调参。从硬件准备到依赖安装,再到数据增强和超参数调整,提供了一系列实用技巧和常见问题解决方案,帮助开发者高效训练Mamba-YOLO模型,避免常见踩坑记录。

tech5的博客 827

python36块砖36人搬算法_Python经典算法第1课:百钱买百鸡

第1课 你知道吗?我有古问题,你有新算法吗?我国古代数学家张丘建在《算经》一书中留下一道经典题目:百钱买百鸡。在数学中,这是一道不定方程整数解的问题,那在Python中,如何用枚举算法解决这一难题呢?题目内容:公鸡每只5钱,母鸡每只3钱,小鸡3只1钱。用100钱买100只鸡,问公鸡、母鸡、小鸡各多少?微课在线程序代码算法优化 优化策略 1.合理选择枚举范围,减少每层的循环次数...

weixin_39869593的博客 3487

5分钟搞定Conflux钱包注册:Fluent钱包从安装到转账全流程指南

本文提供Conflux公链上Fluent钱包的完整注册和使用指南,涵盖从安装、助记词备份到CFX转账的全流程。特别强调安全操作要点,包括助记词保管和网络选择,帮助用户5分钟内快速掌握这款国产公链钱包的核心功能,确保数字资产安全。

weixin_29181861的博客 244

mysql round函数_MySQL基础函数——数学函数详解

函数表示对输入参数值返回-一个具有特定关系的值,MySQL提供了大量丰富的函数,在进行数据库管理以及数据的查询和操作时将会经常用到各种函数。通过对数据的处理,数据库功能可以变得更加强大,更加灵活地满足不同用户的需求。各类函数从功能方面主要分为以下几类:数学函数、字符串函数、日期和时间函数、条件判断函数、系统信息函数和加密函数等。今天咱们就来介绍一下MySQL的数学函数。数学函数主要用来处理数值数据...

weixin_39540426的博客 879

Conda环境创建报错?教你快速解决Solving environment: failed和ResolvePackageNotFound问题

本文深入解析Conda环境创建中常见的'Solving environment: failed'和'ResolvePackageNotFound'报错原因,并提供从基础到高级的系统化解决方案。涵盖渠道配置、版本通配、环境文件编辑等实用技巧,帮助开发者快速解决conda环境创建问题,提升工作效率。

weixin_28677451的博客 258

告别重打包:在Android 9上实现免Root的Frida-Gadget持久化Hook(附AOSP源码修改详解)

本文详细介绍了在Android 9上实现免Root的Frida-Gadget持久化Hook技术方案。通过修改AOSP源码,绕过传统重打包方式面临的签名校验和完整性检查,实现在非Root环境下的系统级Hook。文章包含核心代码修改、编译配置调整及调试技巧,为移动安全研究提供高效稳定的解决方案。

weixin_33726313的博客 501

python36块砖36人搬算法_IT人:我太nan了..........

眼看Q3就要结束了用一句话形容IT人的2019那就是:我太难了•••每个CIO,都希望摸到一手好牌最终,实现“胡牌”达成企业的数字化KPI更好的用户体验、保持业务连续性、提高IT运营效能、实现智能化运营、业务与IT双向驱动……↓可是,现状却很残酷业务与IT存在断层IT管理者们找不到最关键的那张牌 一手“烂牌”怎么胡?全栈智能运维服务商云智慧推出数字化运维中台DOCP就像“全自动麻将桌”把你的运维牌...

weixin_39953673的博客 482

从零搭建基于OpenSpec的现代化UI自动化测试框架实战指南

UI自动化测试是软件质量保障的关键环节,其核心在于通过脚本模拟用户操作,对Web应用界面进行功能验证。其原理在于利用浏览器驱动工具(如Selenium、Playwright)提供的API,实现对页面元素的定位、交互与断言。一个设计良好的自动化框架能显著提升测试脚本的可维护性、可读性和执行稳定性,从而在持续集成、回归测试等场景中发挥巨大价值。本文聚焦于如何构建一个现代化的UI测试框架,通过整合OpenSpec架构规范、Pytest测试引擎与Playwright浏览器自动化工具,形成清晰的页面对象模型(POM)

weixin_28836989的博客 286

python数据结构算法_数据结构与算法:Python语言实现

数据结构与算法:Python语言实现编辑锁定讨论上传视频《数据结构与算法:Python语言实现》是2019年11月机械工业出版社出版的图书,作者是[美]迈克尔T.古德里奇(Michael T.Goodrich)、罗伯特·塔马。书 名数据结构与算法:Python语言实现作 者[美]迈克尔T.古德里奇(Michael T.Goodrich)、罗伯特·塔马ISBN978711160660...

weixin_39887926的博客 871

华为OD机试真题 新系统 2026-04-22 Java&Go 实现【小学生班长选举增强版】

9 月份开学第一天,小学某班级进行班长选举活动,班级共有 N 个学生,每个学生最多可投 3 票(对同一个人只能投一票),也可以弃权不投票,大家投票时写上对应学生的名字。 假设学生不存在重名。考虑到部分少数民族名字带分隔,且整体较长,同学在投票时为了方便,允许同学写全称,也可以只写其中的部分连续段。 例如班级里只有 2 个少数民族名称带点的同学:

MISAYAONE的博客 260

CMCC-IPC-A410串口刷机救砖教程

《CMCC-IPC-A410摄像头串口刷机指南》摘要 本指南针对2018年前老款CMCC-IPC-A410摄像头变砖/升级失败的情况,提供串口刷机方案。需准备CH340G串口模块、杜邦线、海康V5.5.82固件等工具。操作包含硬件连接(TX/RX交叉接线)、115200波特率终端配置、CTRL+U进入刷机模式,通过UPF格式化、tftp传输固件、update写入等步骤完成修复。刷机后设备恢复未激活状态,需重置密码,原定制功能可能失效。整个过程需稳定供电,耗时约15-20分钟,注意此操作将使原厂保修失效。(1

海康威视技术支持 1844

最新Python数据结构与算法教程

适用人群 Python初、中级学习者和开发者,对Python数据结构和算法感兴趣的学生和开发者。 课程概述 Python目前在人工智能,运维,后端开发,爬虫等领域使用越来越广泛,而数据结构和算法是计算机科学的基础知识。本课程使用Python语言系统讲解了常用数据结构和算法,帮助学习者提升开发技能。 课程特点: 1.每个算法和数据结构都有讲义、视频(包含讲解、图示、手动模拟)、源...

qq_46241791的博客 502

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

python数据结构和算法视频教程_基于Python的数据结构与算法视频教程,Python数据结构精讲教程下载...

课程名称非常难得Python好课-基于Python的数据结构与算法视频教程 Python数据结构精讲教程数据结构与算法相信大家都不陌生,但在以往有很多基于JAVA或C等语言的数据结构与算法课程却鲜有基于Python来讲解的数据结构与算法课程,这跟过去几年Python的火热却形成了鲜明的反差不过原因不是我们讨论的重点,技术和学习才是我们的最重要的任务,那么这套非常难得的Python数据结构与算法课程...

weixin_39683163的博客 273

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

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

计算机控制技术及应用

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

【零基础】学python数据结构与算法笔记(目录版)

【零基础】学python数据结构与算法笔记(目录版)

weixin_56760882的博客 869

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

python算法与数据结构-数据结构中常用树的介绍(45)

一、树的定义 树是一种非线性的数据结构,是由n(n >=0)个结点组成的有限集合。如果n==0,树为空树。如果n>0,树有一个特定的结点,根结点根结点只有直接后继,没有直接前驱。除根结点以外的其他结点划分为m(m>=0)个互不相交的有限集合,T0,T1,T2,...,Tm-1,每个结合是一棵树,称为根结点的子树。 树(tree):是以边(edge)相连的结点(n...

weixin_30378311的博客 246

python数据结构谁讲得好_非常难得Python好课-基于Python的数据结构与算法视频教程 Python数据结构精讲教程...

非常难得Python好课-基于Python的数据结构与算法视频教程 Python数据结构精讲教程1.JPG (42.29 KB, 下载次数: 0)2019-11-5 00:01 上传3.JPG (38.01 KB, 下载次数: 0)2019-11-5 00:01 上传2.JPG (44.02 KB, 下载次数: 0)2019-11-5 00:01 上传数据结构与算法相信大家都不陌生,但在以往有很多...

weixin_39851008的博客 138

python数据结构和算法视频教程_趣资料-Python教程:数据结构与算法的Python视频教程...

课时9队列10:21课时10用数组实现队列09:09课时11双端队列03:19章节6:栈课时12栈12:48章节7:算法分析课时13算法时间复杂度和空间复杂度10:40章节8:哈希表课时14哈希表112:14课时15哈希表209:56课时16哈希表311:20章节9:字典课时17python dict 实现07:25章节10:集合课时18python set 原理和实现10:46章节11:递归课时...

weixin_39683163的博客 101

视频教程-Python数据结构与算法视频教程-Python

Python数据结构与算法视频教程 知乎 Python 后端工程师。 htt...

weixin_30844801的博客 706

python数据结构与算法中文教程_《Python数据结构与算法教程》完整版_资源网站...

《网易云课堂《目录章节1: Python数据结构与算法章节2:抽象数据类型和面向对象编程课时3抽象数据类型和面向对象编程07:40章节3:数组和列表课时4python 数组和列表10:54章节4:链表课时5单链表110:38课时6单链表209:09课时7循环双端链表111:12课时8循环双端链表209:17章节5:队列课时9队列10:21课时10用数组实现队列09:09课时11双端队列03:19章...

weixin_39974409的博客 243
上一篇: python数据结构与算法 35 快速排序
下一篇: python数据结构与算法 37 树的实现
杀了这个男孩
博客等级 码龄18年 149粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值