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

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

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

顺序存储结构

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


按从上至下,从左到右顺序存储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



目录
相关文章
|
12月前
|
机器学习/深度学习 算法 数据挖掘
没发论文的注意啦!重磅更新!GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代码实现)
没发论文的注意啦!重磅更新!GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代码实现)
328 0
|
10月前
|
存储 监控 算法
基于 Go 语言跳表结构的局域网控制桌面软件进程管理算法研究
针对企业局域网控制桌面软件对海量进程实时监控的需求,本文提出基于跳表的高效管理方案。通过多级索引实现O(log n)的查询、插入与删除性能,结合Go语言实现并发安全的跳表结构,显著提升进程状态处理效率,适用于千级进程的毫秒级响应场景。
349 15
|
10月前
|
分布式计算 并行计算 算法
《数据之美》:图结构的精妙世界与算法实践
图是表示多对多关系的非线性数据结构,由顶点和边组成,可建模社交网络、路径导航等复杂系统。核心算法包括BFS/DFS遍历、Dijkstra最短路径、Floyd-Warshall全源最短路径,以及Prim和Kruskal最小生成树算法,广泛应用于推荐系统、社交分析与路径规划。
|
11月前
|
运维 监控 JavaScript
基于 Node.js 图结构的局域网设备拓扑分析算法在局域网内监控软件中的应用研究
本文探讨图结构在局域网监控系统中的应用,通过Node.js实现设备拓扑建模、路径分析与故障定位,提升网络可视化、可追溯性与运维效率,结合模拟实验验证其高效性与准确性。
540 3
|
11月前
|
存储 监控 算法
企业电脑监控系统中基于 Go 语言的跳表结构设备数据索引算法研究
本文介绍基于Go语言的跳表算法在企业电脑监控系统中的应用,通过多层索引结构将数据查询、插入、删除操作优化至O(log n),显著提升海量设备数据管理效率,解决传统链表查询延迟问题,实现高效设备状态定位与异常筛选。
238 3
|
11月前
|
机器学习/深度学习 运维 算法
【微电网多目标优化调度】多目标学习者行为优化算法MOLPB求解微电网多目标优化调度研究(Matlab代码实现)
【微电网多目标优化调度】多目标学习者行为优化算法MOLPB求解微电网多目标优化调度研究(Matlab代码实现)
398 1
|
算法 数据可视化 开发者
为什么要学习数据结构与算法
今天,我向大家介绍一门非常重要的课程——《数据结构与算法》。这门课不仅是计算机学科的核心,更是每一位开发者从“小白”迈向“高手”的必经之路。
为什么要学习数据结构与算法
|
10月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
802 0
|
10月前
|
数据采集 分布式计算 并行计算
mRMR算法实现特征选择-MATLAB
mRMR算法实现特征选择-MATLAB
502 2