news 2026/9/12 2:48: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/9/10 22:29:29

Day 38 GPU训练及类的call方法

浙大疏锦行 一、CPU 性能查看 系统级查看&#xff08;Windows/Linux/Mac 通用&#xff09; &#xff08;1&#xff09;Windows 系统 任务管理器&#xff1a;按下 CtrlShiftEsc → 切换到「性能」选项卡 → 查看 CPU 使用率、核心数、频率、缓存等&#xff1b;资源监视器&am…

作者头像 李华
网站建设 2026/9/11 22:25:44

【学习笔记】如果打造可复现、可评测、可迭代的AI技术体系

真正可上线、可扩展、可控成本的 LLM 应用&#xff0c;靠的不是灵光一现的提示词&#xff0c;而是一整套从检索、推理、部署到观测的工程方法。接下来这8个核心技能&#xff0c;会把“会调 Prompt”的手艺变成可复现、可评测、可迭代的体系&#xff1a;让输出可预期、成本有抓手…

作者头像 李华
网站建设 2026/9/11 10:37:54

利用齐次坐标系证明各种几何定理【射影几何】

符号约定 齐次坐标 \(a,b\) 等价&#xff08;\(\exists \lambda, a \lambda b\)&#xff09;记作 \(a\sim b\)所有的齐次坐标都记录为用圆括号包裹的三元组。&#xff08;有的资料会把直线的齐次坐标记录为方括号包裹的三元组&#xff09;&#xff08;使用本文的记录方法可以更…

作者头像 李华
网站建设 2026/9/10 20:10:18

小程序基于springboot的乡镇普法知识科普宣传系统 律师预约系统设计与实现_qf4cwws6(java毕业设计项目源码)

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

作者头像 李华