当前位置: 首页 > news >正文

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

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

二叉树又有完全二叉树和满二叉树,满二叉树指的是二叉树的所有层数的分支都存在,完全二叉树指的是由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; }

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

http://www.cnnetsun.cn/news/53382.html

相关文章:

  • Day 38 GPU训练及类的call方法
  • 【Python实战】火爆全网的“隔空手势画板”是如何实现的?教你用OpenCV+MediaPipe复刻钢铁侠黑科技!
  • 【学习笔记】如果打造可复现、可评测、可迭代的AI技术体系
  • 【论文自动阅读】See Once, Then Act: Vision-Language-Action Model with Task Learning from One-Shot Video Demo
  • 利用齐次坐标系证明各种几何定理【射影几何】
  • 小程序基于springboot的乡镇普法知识科普宣传系统 律师预约系统设计与实现_qf4cwws6(java毕业设计项目源码)
  • 面向对象编程三大特性:封装、继承、多态的核心要义
  • leetcode 2147. 分隔长廊的方案数 困难
  • 学生党必备!这款桌面课表工具太省心了
  • 深度学习实验14代码
  • 优化及性能-–-behaviac
  • 练题100天——DAY26:汇总区间+丢失的数字+数组交集
  • 当AI芯片不再性感:博通的高增长,为何成了催命符?
  • Vibe Coding:AI驱动的编程新范式
  • AI 数字孪生工厂:西门子与中信特钢的实践,如何降本 11%?
  • Spring IoC的实现机制是什么?
  • 耐用折叠屏手机推荐:三星Galaxy Z TriFold如何破解“折痕与耐用”难题?
  • 前端技术风险防控:以防为主,防控结合
  • 给女神发“在吗”,她回了个表情包是几个意思?—— 硬核探讨TCP 三次握手
  • 入门大模型必知的100个基础问题(附简明答案)
  • vue基于Spring Boot的建筑材料管理系统的应用和研究_ug8y52z3
  • 【大模型】-LangChain--RAG文档系统
  • 探索非线性电液伺服系统的模型自适应反步控制
  • 降AI率就要牺牲文笔?WriterPro第一个不服!实测对比比原文写得还好,这文笔简直绝了
  • 我不是这样
  • 10.8 总结
  • 列车售票|基于springboot 列车售票系统(源码+数据库+文档)
  • AI驱动的手动测试变革:赋能而非替代
  • 【奶茶Beta专项】【LVGL9.4源码分析】09-core-group
  • 网络安全异想天开(不定期更新)