news 2026/5/27 4:36:22

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

作者头像

张小明

前端开发工程师

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/5/26 8:24:03

传统VS Phyfusion:物理开发效率提升300%的秘诀

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个对比Demo&#xff1a;左侧展示传统方式手写代码实现的简单物理场景&#xff08;如Jenga积木塔&#xff09;&#xff0c;右侧展示Phyfusion生成的相同场景。要求&#xff1a…

作者头像 李华
网站建设 2026/5/26 6:44:39

【开题答辩全过程】以 基于微信小程序的失物认领系统为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

作者头像 李华
网站建设 2026/5/26 15:14:31

数字色彩的骨架:计算机如何理解颜色

视觉的生理基础与数学化 人类视觉系统对色彩的感知依赖于视网膜上的三种视锥细胞&#xff0c;它们分别对长波、中波和短波敏感。这种生物学特性直接决定了计算机图形学的底层逻辑。技术人员并不需要模拟自然界中连续且无限的光谱&#xff0c;只需要通过特定比例混合三种基础光…

作者头像 李华
网站建设 2026/5/26 8:16:28

服务器文件管理太麻烦?宝塔 FTP+cpolar 让远程操作像本地一样简单

文章目录前言1. Linux安装Cpolar2. 创建FTP公网地址3. 宝塔FTP服务设置4. FTP服务远程连接小结5. 固定FTP公网地址6. 固定FTP地址连接**宝塔 FTP 让服务器文件管理变得简单&#xff0c;而 cpolar 则打破了局域网的限制&#xff0c;两者结合为远程文件操作提供了安全、高效的解决…

作者头像 李华
网站建设 2026/5/26 8:09:46

Web3.js钱包与账户管理

简介 Web3.js Wallet是我们在想要直接使用私钥进行任何区块链操作&#xff08;交易&#xff09;时的主要入口点&#xff0c;在其它库中也被称为Signer。 与其它只能保存一个账户的库不同&#xff0c;Web3.js Wallet可以保存多个账户&#xff0c;每个账户都有它自己的私钥和地…

作者头像 李华