news 2026/3/12 12:35:17

二叉树遍历攻略:前中后序与层序

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
二叉树遍历攻略:前中后序与层序

之前讲过树分为许多种类,二叉树就是其中之一。二叉树指的是树的分支最多只有两支的特殊类型。而且二叉树是有序树,他的左右孩子不能颠倒!。

二叉树又有完全二叉树和满二叉树,满二叉树指的是二叉树的所有层数的分支都存在,完全二叉树指的是由1到N的编号的节点对应的1到N的节点的值是一 一对应的。在完全二叉树中

父节点的编号=他的孩子节点的编号*2;

左孩子节点的编号=他的父节点的编号/2;

右孩子节点的编号=他的父节点的编号/2+1;

二叉树的既然是树的种类之一,所以也可以用vector数组和链式前向星进行存储。如果用顺序存储,若不是完全二叉树,就需要额外开辟空间,所以一般采用链式存储,也只演示链式存储的代码:

#include <iostream> using namespace std; const int N = 1e6 + 10; int l[N], r[N]; int n; int main() { cin >> n; for (int i = 1; i < n; i++) { cin >> l[i] >> r[i]; } return 0; }

二叉树的深度优先遍历分为前序遍历,中序遍历,后序遍历。前序遍历指的是遍历 根 左 右节点的顺序,中序遍历指的是遍历 左 根 右节点的顺序,后续遍历指的是遍历左 右 根节点的顺序。

#include <iostream> using namespace std; const int N = 1e6 + 10; int l[N], r[N]; int n; void dfs1(int u)//前序遍历 { if (u == 0) { return; } cout << u << " "; dfs1(l[u]); dfs1(r[u]); } void dfs2(int u)//中序遍历 { if (u == 0) { return; } dfs2(l[u]); cout << u << " "; dfs2(r[u]); } void dfs3(int u)//后序遍历 { if (u == 0) { return; } dfs3(l[u]); dfs3(r[u]); cout << u << " "; } int main() { cin >> n; for (int i = 1; i < n; i++) { cin >> l[i] >> r[i]; } dfs1(1); dfs2(2); dfs3(3); return 0; }

二叉树的宽度优先遍历与树的相同,也是运用queue的方式来遍历:

#include <iostream> #include <queue> using namespace std; const int N = 1e6 + 10; int l[N], r[N]; int n; void bfs() { queue<int>q; q.push(1); while (q.size()) { int u = q.front(); q.pop(); cout << u << " "; if (l[u]) { q.push(l[u]); } if (r[u]) { q.push(r[u]); } } } int main() { cin >> n; for (int i = 1; i < n; i++) { cin >> l[i] >> r[i]; } bfs(); return 0; }

由此二叉树的基本操作已完结,待我后续学习再与大家分享

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/12 19:52:36

基于vue的健身房系统的设计与实现_nhj67au7_springboot php python nodejs

目录具体实现截图项目介绍论文大纲核心代码部分展示项目运行指导结论源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作具体实现截图 本系统&#xff08;程序源码数据库调试部署讲解&#xff09;同时还支持java、ThinkPHP、Node.js、Spring B…

作者头像 李华
网站建设 2026/3/10 1:42:49

2025年夸克网盘不限速教程:速度可达70MB/s实测有效

2025年12月最新今天教大家一招能解决夸克网盘限制的在线工具。这个工具也是完全免费使用的。下面让大家看看我用这个工具的下载速度咋样。地址获取&#xff1a;放在这里了&#xff0c;可以直接获取 这个速度还是不错的把。对于平常不怎么下载的用户还是很友好的。下面开始今天的…

作者头像 李华
网站建设 2026/3/4 4:57:11

调试功能的说明-–-behaviac

原文 behaviac提供了离线调试以及连调功能。 离线调试 离线调试功能是指在编辑器里加载运行时产生的 _behaviac_$_.log 文件&#xff0c;如下图&#xff0c;可以加载 _behaviac_$_.log 文件&#xff1a; _behaviac_$_.log 是运行游戏时产生的log文件。一般都是产生在exe所在…

作者头像 李华
网站建设 2026/3/10 10:24:00

unity3d scene窗口选中物体, 在 hierarchy高光显示

在 Unity 中实现 “Scene 窗口选中物体时 Hierarchy 面板高光显示”&#xff0c;核心思路是监听 Scene 窗口的选择事件&#xff0c;并通过 Unity 的EditorGUIUtility和EditorWindow相关 API 主动高亮 Hierarchy 面板中对应的物体条目。以下是完整的实现方案&#xff1a;using U…

作者头像 李华
网站建设 2026/3/11 5:10:16

FOC开发工具学习

FOC开发工具使用 ST 提供的 FOC 开发套件——“X-CUBE-MCSDK”&#xff0c;来帮助我们生成 FOC 控制代码 。 X-CUBE-MCSDK&#xff1a;ST 推出的电机控制软件开发套件。其中包括永磁同步电机&#xff08;PMSM&#xff09;固件库&#xff08;FOC 控制&#xff09;以及 STM32 电机…

作者头像 李华