数据结构和算法学习记录——二叉树的存储结构&二叉树的递归遍历(顺序存储结构、链表存储结构、先序中序后序递归遍历)

简介: 数据结构和算法学习记录——二叉树的存储结构&二叉树的递归遍历(顺序存储结构、链表存储结构、先序中序后序递归遍历)

设想一下二叉树要用什么样的方式来存储,一种是用数组,一种是用链表。

顺序存储结构

用数组,也就是用顺序存储结构,比较合适的就是用于完全二叉树:


按从上至下,从左到右顺序存储n个节点的完全二叉树。 其中的节点父子关系会满足:

  • 非根节点(序号 > 1)的父节点的序号是[i / 2]
  • 节点(序号为i)的左孩子节点的序号是[2i],(若2i <= n,否则没有左孩子)
  • 节点(序号为i)的右孩子节点的序号是[2i+1],(若2i+1 <= n,否则没有右孩子)

一般的二叉树也可以采用这种结构,但是会造成空间浪费。

这样简单的一个二叉树要浪费两个空间,再复杂一些的二叉树浪费的空间就会多得多了。 总结:用数组来表示是可行的,但如果一般的二叉树跟对应的完全二叉树相比,缺的节点很多的话,会造成一定的空间浪费。

链表存储结构

链表存储就是用之前的儿子-兄弟表示法,定义两个指针域就可以表示二叉树了。

typedef int ElementType;
typedef struct TreeNode
{
  ElementType data;
  struct TreeNode* Left;
  struct TreeNode* Right;
}TreeNode;

二叉树的递归遍历

先序递归遍历

遍历过程为:

  1. 访问根节点
  2. 先序遍历其左子树
  3. 先序遍历其右子树

先序遍历的序列为:A B D F E C G H I

中序递归遍历

遍历过程为:

  1. 中序遍历其左子树
  2. 访问根节点
  3. 中序遍历其右子树

可以脑子里过一遍,下面再公布正确的中序遍历的序列。

中序遍历的序列为:D B E F A G H C I

后序递归遍历

遍历过程为:

  1. 后序遍历其左子树
  2. 后序遍历其右子树
  3. 访问根节点

同样先自己写出后序遍历的序列,对照后面的正确序列。

后序遍历的序列为:D E F B H G I C A

在先序、中序和后序的遍历过程中,它们经过节点的路线其实是一样的(路线会在之后的非递归遍历中提到)

都是按这个顺序,只是访问各节点的时机不同。

下面就看看各方式遍历下,访问节点的时机分别是怎样的。

首先要清楚,沿着路线,对每个节点都会访问三次:

所谓先序、中序和后序,就是说:先序是在第一次经过节点时就将节点访问、中序是在第二次经过节点时将节点访问、而后序就是在第三次经过节点时将节点访问。

故有了:

先序遍历路线图

 

中序遍历路线图

后序遍历路线图


end



目录
相关文章
|
11天前
|
存储 算法 关系型数据库
数据结构与算法学习二一:多路查找树、二叉树与B树、2-3树、B+树、B*树。(本章为了解基本知识即可,不做代码学习)
这篇文章主要介绍了多路查找树的基本概念,包括二叉树的局限性、多叉树的优化、B树及其变体(如2-3树、B+树、B*树)的特点和应用,旨在帮助读者理解这些数据结构在文件系统和数据库系统中的重要性和效率。
13 0
数据结构与算法学习二一:多路查找树、二叉树与B树、2-3树、B+树、B*树。(本章为了解基本知识即可,不做代码学习)
|
5天前
|
存储
[数据结构] -- 双向循环链表
[数据结构] -- 双向循环链表
12 0
|
11天前
|
存储 算法
探索数据结构:分支的世界之二叉树与堆
探索数据结构:分支的世界之二叉树与堆
|
11天前
|
存储
探索数据结构:便捷的双向链表
探索数据结构:便捷的双向链表
|
11天前
|
存储
探索数据结构:单链表的实践和应用
探索数据结构:单链表的实践和应用
|
17天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于MSER和HOG特征提取的SVM交通标志检测和识别算法matlab仿真
### 算法简介 1. **算法运行效果图预览**:展示算法效果,完整程序运行后无水印。 2. **算法运行软件版本**:Matlab 2017b。 3. **部分核心程序**:完整版代码包含中文注释及操作步骤视频。 4. **算法理论概述**: - **MSER**:用于检测显著区域,提取图像中稳定区域,适用于光照变化下的交通标志检测。 - **HOG特征提取**:通过计算图像小区域的梯度直方图捕捉局部纹理信息,用于物体检测。 - **SVM**:寻找最大化间隔的超平面以分类样本。 整个算法流程图见下图。
|
1天前
|
存储
基于遗传算法的智能天线最佳阵列因子计算matlab仿真
本课题探讨基于遗传算法优化智能天线阵列因子,以提升无线通信系统性能,包括信号质量、干扰抑制及定位精度。通过MATLAB2022a实现的核心程序,展示了遗传算法在寻找最优阵列因子上的应用,显著改善了天线接收功率。
|
4天前
|
监控 算法 数据安全/隐私保护
基于三帧差算法的运动目标检测系统FPGA实现,包含testbench和MATLAB辅助验证程序
本项目展示了基于FPGA与MATLAB实现的三帧差算法运动目标检测。使用Vivado 2019.2和MATLAB 2022a开发环境,通过对比连续三帧图像的像素值变化,有效识别运动区域。项目包括完整无水印的运行效果预览、详细中文注释的代码及操作步骤视频,适合学习和研究。
|
12天前
|
算法
基于粒子群算法的分布式电源配电网重构优化matlab仿真
本研究利用粒子群算法(PSO)优化分布式电源配电网重构,通过Matlab仿真验证优化效果,对比重构前后的节点电压、网损、负荷均衡度、电压偏离及线路传输功率,并记录开关状态变化。PSO算法通过迭代更新粒子位置寻找最优解,旨在最小化网络损耗并提升供电可靠性。仿真结果显示优化后各项指标均有显著改善。
|
7天前
|
机器学习/深度学习 算法 数据挖掘
基于GWO灰狼优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真
本项目展示了基于分组卷积神经网络(GroupCNN)和灰狼优化(GWO)的时间序列回归预测算法。算法运行效果良好,无水印展示。使用Matlab2022a开发,提供完整代码及详细中文注释。GroupCNN通过分组卷积减少计算成本,GWO则优化超参数,提高预测性能。项目包含操作步骤视频,方便用户快速上手。