树的基本概念与二叉树
文章目录
- 树的基本概念与二叉树
- 一、树的概念和结构
- 1. 树的概念
- 2. 树的相关概念
- 二、树的存储
- 1. 左孩子右兄弟表示法
- 2. 双亲表示法
- 三、二叉树
- 1. 特殊的二叉树
- 1.1 满二叉树
- 1.2 完全二叉树
树的基本概念与二叉树
一、树的概念和结构
1. 树的概念
树是一种非线性的数据结构,它是由 n (n≥0) 个有限结点组成一个具有层次关系的集合。之所以称之为"树",是因为它的结构看起来像一棵倒挂的树,根朝上,叶子朝下。树具有以下特点:
- 有一个特殊的节点,称为根节点,根节点没有前驱节点。
- 除根节点外,其余节点被分成 M 个 (M>0) 互不相交的集合。
- 树是递归定义的。
- 在树形结构中,子树之间不能有交集,否则就不是树形结构。
2. 树的相关概念
- 节点的度: 一个节点含有的子树的个数称为该节点的度。
- 叶节点或终端节点: 度为 0 的节点称为叶节点。
- 非终端节点或分支节点: 度不为 0 的节点。
- 双亲节点或父节点: 若一个节点含有子节点,则这个节点称为其子节点的父节点。
- 孩子节点或子节点: 一个节点含有的子树的根节点称为该节点的子节点。
- 兄弟节点: 具有相同父节点的节点互称为兄弟节点。
- 树的度: 一棵树中,最大的节点的度称为树的度。
- 节点的层次: 从根节点开始定义,根为第一层,根的子节点为第二层,以此类推。
- 树的高度或深度: 树中节点的最大层次。
- 堂兄弟节点: 双亲在同一层的节点互为堂兄弟。
- 节点的祖先: 从根到该节点所经分支上的所有节点。
- 子孙: 以某节点为根的子树中任一节点都称为该节点的子孙。
- 森林: 由 m (m>0) 棵互不相交的树的集合称为森林。
需要注意的是:
- 当树为空树时,树的高度/深度通常设为 0。
- 子树之间是不能相交的。
- 除了根节点外,每个节点有且仅有一个父节点。
- 一棵拥有 N 个节点的树有 N-1 条边。
二、树的存储
1. 左孩子右兄弟表示法
左孩子右兄弟表示法是树形结构的一种常见且最优的存储方式。其结点结构如下:
struct TreeNode {int val;struct TreeNode* firstChild; // 指向最左边的第一个孩子结点struct TreeNode* nextSibling; // 指向当前节点右边一个兄弟结点
};
- firstChild: 指向最左边的第一个孩子结点,如果没有则指向 null。
- nextSibling: 指向当前节点右边的一个兄弟节点,如果没有则指向 null。
2. 双亲表示法
双亲表示法不存储指向孩子的指针,只存储指向父亲的指针或下标。
- 不支持从根找孩子,只支持从孩子找父亲。
- 判断两个节点是否在同一棵树中,可以通过寻找它们的根节点是否相同来确定。
- 并查集就是使用双亲表示法实现的。
- 根节点没有父亲,所以通常存储 -1。
三、二叉树

二叉树是一种特殊的树形结构,它实行了"计划生育",每个节点最多只能有两个孩子。二叉树具有以下特点:
- 二叉树中不存在度大于 2 的节点,每个节点最多有两个孩子,也可以只有一个孩子或没有孩子。
- 二叉树由一个根节点以及两棵分别称为左子树和右子树的二叉树组成。
- 二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树。
- 二叉树有多种情况:空树、只有根节点、只有左子树、只有右子树以及左右子树都存在。
1. 特殊的二叉树
1.1 满二叉树
满二叉树是指一棵二叉树的每一层节点数都达到最大值。对于一棵高度为 h 的满二叉树,它一共有 (2^h)-1 个节点。证明如下:
设 F(h) 表示高度为 h 的满二叉树的节点总数,则有:
F(h) = 2^0 + 2^1 + 2^2 + ... + 2^(h-2) + 2^(h-1)
这是一个等比数列,其前 n 项和公式为:
Sn = (a1 * (1 - q^n)) / (1 - q)
代入 a1 = 1, q = 2, n = h,得:
F(h) = (2^h) - 1
另一种证明方法是错位相减法:
- `2F(h) = 2^1 + 2^2 + 2^3 + … + 2^(h-1) + 2^h
F(h) = 2^0 + 2^1 + 2^2 + ... + 2^(h-2) + 2^(h-1)
F(h) = 2^h - 2^0 = 2^h - 1
1.2 完全二叉树
完全二叉树是由满二叉树引出来的,其效率很高。满二叉树是完全二叉树的一种特殊情况。
假设二叉树的高度为 h,则完全二叉树满足以下条件:
- 前 h-1 层都是满的。
- 第 h 层不一定满,但第 h 层的节点从左到右是连续的。
对于高度为 h 的完全二叉树,其节点数的范围是 [2^(h-1), 2^h - 1]。
以上就是对树的基本概念以及二叉树的介绍。树是一种非常重要且常用的数据结构,在计算机科学领域有着广泛的应用。深入理解树的概念和特性,对于解决实际问题和优化算法设计都有很大帮助。
相关文章:
树的基本概念与二叉树
文章目录 树的基本概念与二叉树一、树的概念和结构1. 树的概念2. 树的相关概念 二、树的存储1. 左孩子右兄弟表示法2. 双亲表示法 三、二叉树1. 特殊的二叉树1.1 满二叉树1.2 完全二叉树 树的基本概念与二叉树 一、树的概念和结构 1. 树的概念 树是一种非线性的数据结构,它是…...
什么是物理服务器?
物理服务器又叫做独立服务器,指物理上的单独服务器,是有着实体的服务器并不是虚拟的,物理服务器也可以理解成一台超大的电脑,但是对于普通的家用电脑来说,物理服务器需要长期处于开机的状态,对于硬件性能消…...
数据结构:详解【树和二叉树】
1. 树的概念及结构(了解) 1.1 树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝…...
“成像光谱遥感技术中的AI革命:ChatGPT在遥感领域中的应用“
遥感技术主要通过卫星和飞机从远处观察和测量我们的环境,是理解和监测地球物理、化学和生物系统的基石。ChatGPT是由OpenAI开发的最先进的语言模型,在理解和生成人类语言方面表现出了非凡的能力。本文重点介绍ChatGPT在遥感中的应用,人工智能…...
semhear环境sox
这里写自定义目录标题 pip list 看到当前环境下已经有sox了怀疑跟torchaudio和torchvision有关,更新了一下:装了torchvisionsox还是找不到 pip list 看到当前环境下已经有sox了 怀疑跟torchaudio和torchvision有关,更新了一下: p…...
如何快速开启一个项目-ApiHug - API design Copilot
ApiHug101-001开启篇 🤗 ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱,有温度,有质量,有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin |…...
从用友U9到钉钉通过接口配置打通数据
从用友U9到钉钉通过接口配置打通数据 接通系统:用友U9 用友U9cloud深耕制造领域十三载,U9cloud在机械、电子、汽配、家具、整车、军工等细分行业有着深厚的积累,尤其是机械、电子和汽配行业,不但打造了多个成熟的产品模式和应用场…...
PyQt qrc2py 使用PowerShell将qrc文件转为py文件并且将导入模块PyQt或PySide转换为qtpy模块开箱即用
前言 由于需要使用不同的qt环境(PySide,PyQt)所以写了这个脚本,使用找到的随便一个rcc命令去转换qrc文件,然后将导入模块换成qtpy这个通用库(支持pyside2-6,pyqt5-6),老版本的是Qt.py(支持pysi…...
phpstorm设置头部注释和自定义注释内容
先说设置位置: PhpStorm中文件、类、函数等注释的设置在:setting-》Editor-》FIle and Code Template-》Includes-》PHP Function Doc Comment下设置即可,其中方法的默认是这样的: /** ${PARAM_DOC} #if (${TYPE_HINT} ! "…...
【数据分析面试】10. 计算平均通勤时间(SQL:timestampdiff() 和datediff()区别)
题目 假设你在Uber工作。rides表包含了关于Uber用户在美国各地的行程信息。 编写一个查询,以获取纽约(NY)每位通勤者的平均通勤时间(以分钟为单位),以及纽约所有通勤者的平均通勤时间(以分钟为…...
2024年150道高频Java面试题(二十二)
43. ArrayList 和 Vector 的区别是什么? ArrayList 和 Vector 是 Java 中用于存储对象的两种不同类型的动态数组。它们都实现了 List 接口,但存在一些重要的区别: 同步性: ArrayList 是不同步的,意味着它不是线程安全…...
如何使用校园网——Win10笔记本,台式机互开热点
当我们使用校园网的时候,往往只能连接一个电脑端,但是又想两个机子同时连接WIFI怎么办呢? 当然,前提条件是你先得其中一台电脑有网络哈 1、打开想开共享热点的电脑的设置 A、点击WIN,再点击设置 2、点击网络和Inte…...
c#:简洁实现if-else语句
c#:简洁实现if-else语句 在C#中,可以使用三元运算符(? :)来简洁地实现if-else语句。其语法格式为: 条件表达式 ? 表达式1 : 表达式2 例如:当条件表达式为真时,返回表达式1的值,否…...
金融贷款批准预测项目
注意:本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 ([www.aideeplearning.cn]) 在金融服务行业,贷款审批是一项关键任务,它不仅关系到资金的安全,还直接影响到金融机构的运营效率和风险管理…...
FR中隐藏系统管理--用户管理中 表格中每条数据中的编辑按钮,删除按钮
比如隐藏删除按钮: var userTableTools BI.Constants.getConstant("dec.constant.user.table.tools")for(var key in userTableTools){if(key "delete"){var deleteItem userTableTools["delete"]deleteItem.invisible true;}}...
函数重载和引用【C++】
文章目录 函数重载什么是函数重载?函数重载的作用使用函数重载的注意点为什么C可以函数重载,C语言不行? 引用什么是引用?引用的语法引用的特点引用的使用场景引用的底层实现传参时传引用和传值的效率引用和指针的区别 函数重载 什…...
rust-tokio发布考古
源头: Carl Lerche Aug 4, 2016 I’m very excited to announce a project that has been a long time in the making. 我很兴奋地宣布一个酝酿已久的项目。 Tokio is a network application framework for rapid development and highly scalable deployments…...
3D医疗图像配准 | 基于Vision-Transformer+Pytorch实现的3D医疗图像配准算法
项目应用场景 面向医疗图像配准场景,项目采用 Pytorch ViT 来实现,形态为 3D 医疗图像的配准。 项目效果 项目细节 > 具体参见项目 README.md (1) 模型架构 (2) Vision Transformer 架构 (3) 量化结果分析 项目获取 https://download.csdn.net/down…...
设计模式(18):状态模式
核心 用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题 结构 环境类(Context): 环境类中维护一个State对象,它定义了当前的状态,并委托当前状态处理一些请求; 抽象状态类(State): 用于封装对象的一个特定状态所对应的行为&a…...
如果用大模型考公,kimi、通义千问谁能考高分?
都说大模型要超越人类了,今天就试试让kimi和通义千问做公务员考试题目,谁能考高分? 测评结果再次让人震惊! 问题提干:大小两种规格的盒装鸡蛋,大盒装23个,小盒装16个,采购员小王买了…...
直接上代码吧,咱们先用Python+OpenCV搞个帧间差法的Demo。看这段核心代码
基于帧间差法进行视频目标检测处理 【是仅源码的价格】 【可写完整课程设计文档报告】 需要或需要请随时联系,博主常在线能秒回 1.[1]视频目标检测: 视频目标检测是指从视频流中自动识别和提取出运动目标的过程 视频目标检测算法通常基于以下原理和方法&…...
Halcon拼图算子tile_images_offset实战:从图像裁切到精准拼接
1. 认识tile_images_offset算子 第一次接触Halcon的tile_images_offset算子时,我正面临一个棘手的工业检测项目。客户需要将多个摄像头拍摄的电路板局部图像拼接成完整视图,传统手动拼接方式效率低下且误差大。这个算子就像及时雨,完美解决了…...
G-Helper解决华硕笔记本风扇异常问题完全指南
G-Helper解决华硕笔记本风扇异常问题完全指南 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, Scar, and other model…...
“AI人工智能+”政务一网通办多智能体协同建设方案:五层两体系总体架构、数据与安全体系、信创适配与实施运维
该方案是一份成熟的技术蓝图,它不仅仅是将AI简单叠加到政务系统,而是通过“多智能体协同”重构了业务组织逻辑。方案详细定义了从语料治理、模型微调、Agent协作、信创适配到安全合规的全链路工程细节,具有极强的实操性与前瞻性,适…...
阿里云物联网平台OTA升级避坑指南:从版本号上报到Bin文件拉取的全流程排错
阿里云物联网平台OTA升级全链路排错实战手册 当设备固件需要远程更新时,OTA技术无疑是救星。但现实往往比理想骨感——版本号莫名失踪、升级包半路"走失"、设备在关键时刻"装聋作哑"。这些问题不仅耽误进度,更可能让生产线停摆。本文…...
从模型到文档:基于快马ai实现solidworks设计数据自动下游处理
在机械设计领域,SolidWorks作为主流的三维建模工具,经常需要将设计数据转化为下游生产文档。最近我在一个设备开发项目中,就遇到了如何高效处理装配体数据的问题。传统手工整理零件清单、计算材料用量、编写采购单和装配说明的过程既耗时又容…...
ARMv8-A架构革命——超越64位寻址的三大范式转移
该文章同步至公众号OneChan 开篇:回答上篇进阶思考 在上一篇的结尾,我们留下了三个问题,现在让我们逐一探讨: 1. 从A53到A55再到A510,ARM的小核设计哲学如何演变? Cortex-A53 (2014):定义了“…...
Cockpit CMS终极扩展开发指南:7步创建自定义字段类型与组件
Cockpit CMS终极扩展开发指南:7步创建自定义字段类型与组件 【免费下载链接】cockpit Add content management functionality to any site - plug & play / headless / api-first CMS 项目地址: https://gitcode.com/gh_mirrors/coc/cockpit Cockpit CMS…...
快速验证机器人抓取逻辑:用快马平台十分钟搭建openclaw仿真原型
最近在研究机器人抓取相关的技术,发现openclaw这个开源框架挺有意思的。不过搭建完整的仿真环境需要配置不少东西,对于快速验证想法来说有点麻烦。于是尝试用InsCode(快马)平台来快速搭建原型,没想到十分钟就搞定了基础功能,分享一…...
Koikatu HF Patch完整安装指南:5步轻松解锁游戏全部潜力
Koikatu HF Patch完整安装指南:5步轻松解锁游戏全部潜力 【免费下载链接】KK-HF_Patch Automatically translate, uncensor and update Koikatu! and Koikatsu Party! 项目地址: https://gitcode.com/gh_mirrors/kk/KK-HF_Patch 还在为Koikatu游戏体验不完整…...
