数据结构--二叉树知识讲解

news2026/5/18 5:13:41
一、树1.**树的概念与结构 **树是一种非线性的数据结构它是由n(n ≥ 0)个有限结点组成的、具有层次关系的集合。当n 0时称为空树。当n 0时有且仅有一个特殊结点称为根结点Root。除根结点外其余结点可分为m(m ≥ 0)个互不相交的有限集合每个集合本身又是一棵树称为根的子树⼦树是不相交的除了根结点外每个结点有且仅有⼀个⽗结点⼀棵N个结点的树有N-1条边2.树的相关术语父节点/双亲结点若一个结点含有子结点则这个结点称为其子结点的父节点如A 是 B、C、D、E、F、G 的父结点子结点/孩子结点一个结点含有子树的根节点称为该结点的子结点如B、C、D、E、F、G 是 A 的孩子结点兄弟结点:具有相同父结点的结点互称为兄弟结点亲兄弟,如B、C、D、E、F、G 互为兄弟父结点都是 A结点的度一个结点拥有的子结点数量就是该结点的度如A 的度 6有 6 个孩子B/C/D/E/F/G树的度一棵树中所有结点的度的最大值就是树的度如A 的度是 6是全树最大的因此这棵树的度 6叶子结点 / 终端结点度为 0 的结点没有子结点的结点如B、C、H、I、K、L、M、N、P、Q共 10 个叶子结点分支结点 / 非终端结点度不为 0 的结点有子结点的结点如A、D、E、F、G、J共 6 个分支结点结点的层次从根结点开始计数根为第 1 层根的子结点为第 2 层以此类推如第 1 层A第 2 层B、C、D、E、F、G第 3 层H、I、J、K、L、M、N第 4 层P、Q树的高度 / 深度树中结点的最大层次数如最大层次是 4P、Q 在第 4 层因此树的高度 4结点的祖先从根结点到该结点路径上经过的所有结点都是该结点的祖先如Q 的祖先A、E、JH 的祖先A、D子孙结点以某结点为根的子树中任意结点都称为该结点的子孙如E 的子孙I、J、P、Q路径从树中任意结点出发沿「父结点→子结点」的连接到达另一结点的结点序列如A 到 Q 的路径A → E → J → Q森林由m(m0)棵互不相交的树组成的集合称为森林简单来说就是把一棵树的根结点删掉剩下的子树集合就是一个森林比如删掉 A剩下 B、C、D 为根的子树就是一个森林3. 树的表示方法3.1 双亲表示法核心思想用数组存储所有节点每个节点只记录自己的值和父节点的下标优点查找父节点极快O (1)缺点查找子节点需要遍历整个数组适用只需要快速找父节点的场景双亲表示法结点结构// 双亲表示法 节点结构typedefstructPTNode{// 节点数据intdata;// 父节点在数组中的下标根节点为 -1intparent;}PTNode;3.2 孩子表示法核心思想用数组存所有节点每个节点带一个链表存储所有子节点的下标优点查找子节点极快缺点查找父节点需要遍历适用文件目录、多叉树孩子链表的节点// 孩子链表的节点存子节点下标typedefstructChildNode{intindex;// 子节点在数组中的下标structChildNode*next;// 下一个子节点}ChildNode;3.3 双亲孩子表示法核心思想孩子表示法和每个节点记录父节点下标优点找父、找子都极快缺点结构稍复杂适用需要双向查找的树双亲孩子表示法的结点typedefstructPCTNode{intdata;intparent;// 父节点下标ChildNode*first;}PCTNode;3.4 孩子兄弟表示法核心思想任意树转化为二叉树每个节点只存两个指针firstChild指向第一个子节点nextSibling指向右边的兄弟节点优点所有树都能转二叉树代码极简缺点理解稍难适用二叉树、红黑树、B 树、文件系统结点结构typedefstructCSNode{intdata;structCSNode*firstChild;// 第一个子节点structCSNode*nextSibling;// 右兄弟节点}CSNode3.5 二叉树专用表示法二叉树是度最多为 2的树结构最简单、用途最广结点结构// 二叉树节点typedefstructBiTNode{intdata;structBiTNode*lchild,*rchild;// 左、右孩子}BiTNode;| | |表示法存储结构优点缺点适用场景双亲表示法数组找父极快找子慢并查集孩子表示法数组 链表找子极快找父慢文件目录双亲孩子数组 链表父子都快结构复杂通用树孩子兄弟纯链表万能转二叉树理解稍难所有树、二叉树、红黑树二、二叉树1.概念与结构定义二叉树是每个节点最多有两个子节点的树形结构两个子节点分别称为左孩子left child右孩子right child特点子树有左右之分顺序不能随意交换可以是空树 ,每个节点度≤ 22. 特殊二叉树2.1 满二叉树每一层节点都达到最大值所有叶子结点都在最底层加粗样式高度h节点总数 2^h -12.2 完全二叉树除最后一层外其他层节点都满最后一层节点靠左连续排列3.二叉树性质根据满⼆叉树的特点可知若规定根结点的层数为1则⼀棵⾮空⼆叉树的第i层上最多有2i−1个结点若规定根结点的层数为1则深度为 h 的⼆叉树的最⼤结点数是2h − 1若规定根结点的层数为1具有 n 个结点的满⼆叉树的深度h log(n1)( log以2为底 n1 为对数)4.二叉树的存储结构⼆叉树⼀般可以使⽤两种结构存储⼀种顺序结构⼀种链式结构4.1 顺序结构二叉树的顺序存储结构是指采用数组对二叉树进行存储。该存储方式仅适用于完全二叉树若用于存储非完全二叉树会因数组中产生大量空闲位置导致存储空间严重浪费因此完全二叉树是最适合采用顺序存储的二叉树类型。在实际应用中堆数据结构中的堆 通常采用数组实现顺序存储。需要明确区分数据结构中的堆是一种特殊的完全二叉树结构与操作系统虚拟进程地址空间中用于动态内存分配的堆区是两个完全不同的概念二者不可混淆。4.2 链式结构二叉树的链式存储结构是通过链表来表示一棵二叉树利用链表指针反映节点之间的逻辑层次关系。通常情况下链表中的每个节点包含三个域一个数据域和两个指针域。其中数据域用于存储节点数据两个指针域分别用于存储指向该节点左孩子和右孩子的节点地址。三、顺序结构二叉树–堆⼀般堆使⽤顺序结构的数组来存储数据堆是⼀种特殊的⼆叉树具有⼆叉树的特性的同时还具备其他的特性1.堆的基本概念堆是一种完全二叉树结构的优先队列不是内存里的堆内存2.堆必须同时满足两个条件结构条件是一棵完全二叉树堆序性质父节点与子节点满足大小关系大根堆 / 小根堆3.堆的两种类型3.1 大根堆最大堆 Max Heap根节点值最大任意父节点 ≥ 左右孩子节点从上到下递减3.2 小根堆最小堆 Min Heap根节点值最小任意父节点 ≤ 左右孩子节点从上到下递增注意堆不要求左右子树有序只要求父子有序4.二叉树的性质对于具有n个结点的完全⼆叉树如果按照从上⾄下从左⾄右的数组顺序对所有结点从0开始编号则对于序号为i的结点有若i0i位置结点的双亲序号(i-1)/2i0i为根结点编号⽆双亲结点若2i1n左孩⼦序号2i12i1n否则⽆左孩⼦若2i2n右孩⼦序号2i22i2n否则⽆右孩⼦5.堆的实现堆四、链式二叉树的实现链式二叉树

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…