数据结构:树的先序遍历、中序遍历、后序遍历和层序遍历

前言:

题目:给定一颗以1为根的树(分别给出每个点的左右儿子),求出先序遍历、中序遍历、后序遍历和层序遍历。

思路:二叉树

代码实现:

cpp 复制代码
//先序遍历
void dfs1(int x) {
	cout << x << " ";
	if (l[x]) dfs1(l[x]);
	if (r[x]) dfs1(r[x]);
}
//中序遍历
void dfs2(int x) {
	if (l[x]) dfs2(l[x]);
	cout << x << " ";
	if (r[x]) dfs2(r[x]);
}
//后续遍历
void dfs3(int x) {
	if (l[x]) dfs3(l[x]);
	if (r[x]) dfs3(r[x]);
	cout << x << " ";
}
//层序遍历
void bfs() {
	queue<int> q;
	q.push(1);
	while (q.size()) {
		int x = q.front(); q.pop();
		cout << x << " ";
		if (l[x]) q.push(l[x]);
		if (r[x]) q.push(r[x]);
	}
 }

拓展:

1. 先序遍历(Preorder Traversal)

顺序 :根节点 → 左子树 → 右子树
特点:优先访问根节点,适合需要先处理父节点再处理子节点的场景(如复制树的结构)。

2. 中序遍历(Inorder Traversal)

顺序 :左子树 → 根节点 → 右子树
特点:对二叉搜索树(BST)中序遍历时,结果是有序序列。

3. 后序遍历(Postorder Traversal)

顺序 :左子树 → 右子树 → 根节点
特点:优先处理子节点再处理根节点,适合需要释放树的内存或计算表达式树。

4. 层序遍历(Level Order Traversal)

顺序 :按树的层级从上到下、从左到右逐层访问节点。
实现方式:通常使用队列(Queue)实现,属于广度优先搜索(BFS)。

总结对比

遍历方式 顺序 常见应用场景
先序 根 → 左 → 右 复制树结构、前缀表达式
中序 左 → 根 → 右 二叉搜索树的有序输出
后序 左 → 右 → 根 删除树、后缀表达式
层序 按层级逐层访问 计算树的高度、BFS算法
相关推荐
liulilittle1 分钟前
Unix/Linux 平台通过 IP 地址获取接口名的 C++ 实现
linux·开发语言·c++·tcp/ip·unix·编程语言
深耕AI3 分钟前
【MFC 小白日记】对话框编辑器里“原型图像”到底要不要勾?3 分钟看懂!
c++·编辑器·mfc
Nerd Nirvana8 分钟前
C++编程——异步处理、事件驱动编程和策略模式
开发语言·c++·策略模式·嵌入式开发·事件驱动·异步处理
一拳一个呆瓜8 分钟前
【MFC】对话框节点属性:Condition(条件)
c++·mfc
二哈不在线27 分钟前
代码随想录二刷之“贪心算法”~GO
算法·贪心算法·golang
快去睡觉~27 分钟前
力扣416:分割等和子集
数据结构·c++·算法·leetcode·职场和发展·动态规划
仙俊红30 分钟前
LeetCode每日一题,2025-9-5
算法·leetcode·职场和发展
阿维的博客日记35 分钟前
LeetCode 240: 搜索二维矩阵 II - 算法详解(秒懂系列
算法·leetcode·矩阵
小O的算法实验室1 小时前
2024年ASOC SCI2区TOP,有效离散人工蜂群算法+变压器制造矩形切割问题,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
会当临1 小时前
【c++】四种类型转换形式
开发语言·c++