一、树的基本概念

(一)定义

树是由 n(n ≥ 0) 个结点组成的有限集合,是一种非线性层次结构:

  • 当 n = 0 时,称为空树
  • 当 n > 0 时,存在唯一的根结点(无前驱结点),其余结点可划分为 m(m ≥ 0) 个互不相交的有限子集,每个子集都是一棵独立的子树

(二)结点与树的核心属性

概念定义
结点的度结点拥有的子树个数
叶结点(终端结点)度为 0 的结点(无子树,位于树的最底层)
分支结点(非终端结点)度不为 0 的结点(至少拥有一棵子树)
树的度树中所有结点的最大度数
深度 / 高度从根结点开始计数,根为第 1 层,子结点依次递增,树的最大层数即为深度 / 高度

(三)存储结构

  • 顺序存储:通过数组存储结点,需结合结点间的层次关系(如双亲下标)关联数据,适用于结构规则的树(如完全二叉树)。
  • 链式存储:通过指针记录结点的子树地址(如孩子指针、兄弟指针),灵活性高,适用于各类形态的树。

二、二叉树的基本概念

(一)定义

二叉树是 n(n ≥ 0) 个结点的有限集合,满足:

  • 当 n = 0 时,为空二叉树;
  • 当 n > 0 时,由根结点左子树右子树组成,且左、右子树互不相交,均为二叉树。

(二)核心特点

  1. 每个结点最多有 2 棵子树(左子树和右子树),即二叉树的度最大为 2;
  2. 左、右子树具有有序性,不可随意颠倒(如 “仅有左子树” 与 “仅有右子树” 是两种不同结构);
  3. 若结点仅有一棵子树,必须明确标注是左子树还是右子树。

三、特殊二叉树

类型定义
斜树所有结点仅含一棵子树,分为左斜树(仅左子树)和右斜树(仅右子树)
满二叉树深度为 k(k ≥ 1),所有分支结点均有左、右子树,且所有叶子结点在同一层
完全二叉树深度为 k(k ≥ 1),按层序编号后,与同深度满二叉树的结点编号完全一致

四、二叉树重要性质

  1. 第 i 层结点数上限:第 i(i ≥ 1) 层最多有 2^{i-1} 个结点(如第 3 层最多 4 个结点);
  2. 深度为 k 的结点总数上限:深度为 k(k ≥ 1) 的二叉树,最多有 2^k - 1 个结点(此时为满二叉树);
  3. 叶子结点与度为 2 的结点关系:任意非空二叉树中,叶子结点数 n₀ = 度为 2 的结点数 n₂ + 1(即 n₀ = n₂ + 1);
  4. 完全二叉树深度计算:含 n 个结点的完全二叉树,深度为 ⌊log₂n⌋ + 1⌊x⌋ 表示向下取整)。

五、二叉树遍历方式

二叉树遍历是按规则访问所有结点(每个结点仅访问一次),核心分为深度优先遍历(DFS)和广度优先遍历(BFS):

遍历类型具体方式遍历顺序
深度优先遍历前序遍历根结点 → 左子树 → 右子树
中序遍历左子树 → 根结点 → 右子树
后序遍历左子树 → 右子树 → 根结点
广度优先遍历层序遍历按层次从上到下、同层从左到右

前序遍历
规则是若二叉树为空,则空操作返回,否则先访问根结点,然后前序遍历左子
树,再前序遍历右子树。如图,遍历的顺序为:ABDGHCEIF。

void PreOrder(TreeNode* root) {if (root == NULL) return;  // 空树,递归终止printf("%d ", root->data); // 访问根结点PreOrder(root->left);      // 递归遍历左子树PreOrder(root->right);     // 递归遍历右子树
}

中序遍历
规则是若树为空,则空操作返回,否则从根结点开始(注意并不是先访问根结
点),中序遍历根结点的左子树,然后是访问根结点,最后中序遍历右子树。如图,遍历的顺序为:GDHBAEICF。

void InOrder(TreeNode* root) {if (root == NULL) return;  // 空树,递归终止InOrder(root->left);       // 递归遍历左子树printf("%d ", root->data); // 访问根结点InOrder(root->right);      // 递归遍历右子树
}

3.后序遍历
规则是若树为空,则空操作返回,否则从左到右先叶子后结点的方式遍历访问左
右子树,最后是访问根结点。如图,遍历的顺序为:GHDBIEFCA。

void PostOrder(TreeNode* root) {if (root == NULL) return;  // 空树,递归终止PostOrder(root->left);     // 递归遍历左子树PostOrder(root->right);    // 递归遍历右子树printf("%d ", root->data); // 访问根结点
}

遍历顺序:按树的层次从上到下、同一层从左到右依次访问所有结点,本质是 “按层访问”。​实现依赖:需借助队列(先进先出,FIFO),通过 “根结点入队 → 队头出队访问 → 左右子结点入队 → 循环至队空” 的逻辑实现。

void LevelOrder(TreeNode* root) {if (root == NULL) return;          // 空树,直接返回SeqQue* queue = CreateSeqQue(100); // 创建容量为 100 的队列EnterSeqQue(queue, root);          // 根结点入队while (!IsEmptySeqQue(queue)) {    // 队列非空,循环处理TreeNode* curr = GetHeadSeqQue(queue); // 取队头结点printf("%d ", curr->data);     // 访问当前结点QuitSeqQue(queue);             // 队头结点出队if (curr->left != NULL)        // 左子结点非空,入队EnterSeqQue(queue, curr->left);if (curr->right != NULL)       // 右子结点非空,入队EnterSeqQue(queue, curr->right);}DestroySeqQue(queue);              // 销毁队列,释放内存
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/94408.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/94408.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/94408.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单片机---------WIFI模块

1.ESP-12F模组基础知识ESP12-F模组(安信可(Ai-Thinker)ESP8266系列模组)是一款基于乐鑫(Espressif)公司ESP8266芯片的Wi-Fi无线通信模块,广泛应用于物联网(IoT)领域。它体…

迅为RK3562开发板Android修改uboot logo

本文档配套资料在网盘资料“iTOP-3562 开发板\02_【iTOP-RK3562 开发板】开发资料\07_Android 系统开发配套资料\05_Android 修改 uboot logo 配套资料”路径下。1 准备 logo系统默认 uboot logo,如下图所示:我们如果想要替换这个 logo,首先要制作一个新…

反催收APP开发思路:用Flutter打造证据链管理工具

针对非法催收问题,熊哥分享了一款反催收APP的开发思路,旨在帮助“诚而不幸”的负债人收集骚扰证据,通过Flutter实现跨平台部署。本文整理其核心功能与技术方案,助力开发者快速上手!一、核心功能:证据收集与…

市政道路井盖缺失识别误报率↓82%!陌讯多模态融合算法实战优化与边缘部署

原创声明本文为原创技术解析文章,核心技术参数、架构设计及实战数据引用自 “陌讯技术白皮书”,文中算法实现与优化方案均基于实测验证,禁止未经授权转载或篡改内容。一、行业痛点:市政井盖识别的 “三大拦路虎”市政道路井盖作为…

navicat及SQLyog的下载和安装

navicat安装和使用navicat下载和安装navicat 下载navicat 的安装SQLyog下载和安装SQLyog 的下载SQLyog 的安装连接到MySQL数据库navicat下载和安装 navicat 下载 navicat下载地址 这两个都是满足我们需求的,均可 这样我们就得到了一个双击可执行的exe文件 navic…

在TencentOS3上部署OpenTenBase:从入门到实战的完整指南

文章目录前言初识OpenTenBase:不只是又一个分布式数据库OpenTenBase的核心特性环境准备系统环境检查安装必要的依赖包用户环境配置:安全第一创建专用用户配置SSH免密登录(单机部署也需要)源码编译:从零开始构建获取源码…

flink常见问题之超出文件描述符限制

引言Apache Flink 是一个强大且流行的流处理框架,它支持高吞吐量和低延迟的数据处理。在处理大规模数据流时,Flink 用户可能会遇到各种性能瓶颈,其中之一就是文件描述符的限制。文件描述符是操作系统用来表示打开文件或其他输入/输出资源的一…

雅菲奥朗SRE知识墙分享(一):『SRE对智能运维领域所产生的深远影响』

一、SRE推动了运维与开发的融合1、增强协作:SRE模式鼓励运维与开发团队之间的紧密合作,共享知识、资源和责任,共同解决系统稳定性和性能问题。2、共同目标:通过共同设定系统可靠性和性能目标,运维和开发团队能够协同工…

【JVM内存结构系列】一、入门:先搞懂整体框架,再学细节——避免从一开始就混淆概念

在Java开发中,你是否遇到过这些困惑:明明代码没写错,却突然抛出OutOfMemoryError?调优GC参数时,不知道-Xms和-XX:MetaspaceSize分别影响哪块内存?面试时被问“JVM内存结构和Java内存模型有啥区别”,只能含糊其辞? 其实,这些问题的根源都指向同一个核心——没搞懂JVM的…

《Dual Prompt Personalized Federated Learning in Foundation Models》——论文阅读

面向大规模预训练模型(ViT、BERT)的千万级设备场景,用“双提示(Dual Prompt)”机制实现高效、可扩展的个性化联邦学习(PFL)1.研究背景传统联邦学习在客户端数据异构(非独立同分布&am…

深度剖析Lua Table的运作方式

前言&#xff1a;本篇基于Lua-5.3.6源码并配合《Lua 解释器构建&#xff1a;从虚拟机到编译器》一书进行Table的运作解读。一、Table数据结构typedef struct Table {CommonHeader;lu_byte flags; /* 1<<p means tagmethod(p) is not present */lu_byte lsizenode; /* l…

PETR/PETRv2

PE: position embedding 一、PETR算法动机回归 1.1 DETR 输入组成&#xff1a;包含2D位置编码和Object Query 核心流程&#xff1a;通过Object Query直接索引2D特征图&#xff0c;结合位置编码迭代更新Query 特点&#xff1a;整体流程简洁&#xff0c;每个Query代表一个潜在目标…

计算机大数据毕业设计推荐:基于Spark的气候疾病传播可视化分析系统【Hadoop、python、spark】

精彩专栏推荐订阅&#xff1a;在下方主页&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f496;&#x1f525;作者主页&#xff1a;计算机毕设木哥&#x1f525; &#x1f496; 文章目录 一、项目介绍二、…

英伟达显卡GPU驱动的本质

我们来深入、详细地探讨一下英伟达&#xff08;NVIDIA&#xff09;GPU驱动程序的本质。 普通用户眼中的驱动程序可能只是一个“让显卡工作的软件”&#xff0c;但它的本质远比这复杂和深刻。我们可以从几个层面来理解它。 核心比喻&#xff1a;翻译官、指挥官与优化大师 如果说…

算法 ---哈希表

一、哈希介绍 是什么 存储数据的容器 什么用 快速查找某个元素 什么时候用哈希表 频繁的查找某一个数的时候 怎么用哈希表 &#xff08;1&#xff09;容器&#xff08;哈希表&#xff09; &#xff08;2&#xff09;用数组模拟哈希表&#xff08;字符串的字符&#xf…

基于分布式环境的令牌桶与漏桶限流算法对比与实践指南

基于分布式环境的令牌桶与漏桶限流算法对比与实践指南 在高并发的分布式系统中&#xff0c;限流是保障服务可用性和稳定性的核心手段。本文聚焦于令牌桶算法与漏桶算法在分布式环境下的实现与优化&#xff0c;对多种解决方案进行横向对比&#xff0c;分析各自的优缺点&#xff…

WPF MVVM入门系列教程(TabControl绑定到列表并单独指定每一页内容)

在以前的开发过程中&#xff0c;对于TabControl控件&#xff0c;我一般是习惯直接定义TabItem&#xff0c;在TabItem下布局&#xff0c;并进行绑定。 类似这样 1 <TabControl ItemsSource"{Binding TabList}" SelectedIndex"0">2 <TabItem…

L2CAP 面向连接信道(CoC)在 BLE 中的应用:建立、流控与数据传输

在物联网(IoT)蓬勃发展的今天,低功耗蓝牙(BLE)技术因其高效节能、低成本等特性,成为短距离无线通信的首选方案。作为 BLE 协议栈的核心组件,逻辑链路控制与适配协议(L2CAP)的面向连接信道(CoC)承担着数据传输的关键任务。本文将深入解析 L2CAP CoC 在 BLE 中的应用,…

医疗AI与医院数据仓库的智能化升级:异构采集、精准评估与高效交互的融合方向(上)

摘要: 随着医疗信息化建设的深入,医院数据仓库(Data Warehouse, DW)作为医疗AI应用的核心数据底座,其效能直接决定智能化转型的深度与广度。本文聚焦医疗AI驱动下医院数据仓库的三大关键升级功能——异构采集支持数据库体检与智能SQL分析、评估引擎重构实现六大数据库精准…

2015-2018年咸海流域1km归一化植被指数8天合成数据集

数据集摘要数据集包含2015年-2018年咸海流域NDVI 8天均值数据。提取美国国家航空航天局中分辨率成像光谱仪MOD13A2产品第一波段作为归一化植被指数数据&#xff0c;乘以比例因子0.0001&#xff0c;叠加咸海流域边界数据&#xff0c;裁切后得到咸海流域范围内的NDVI月均值数据。…