news 2026/6/12 11:16:28

算法:二叉树遍历

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
算法:二叉树遍历

遍历:根序,左永远在右的前面

从下到上:后序,从上到下:先序,有序输出二叉树:中序(落下顺序)

遍历(Traversal)

├─ DFS(深度优先)
│ ├─ 前序
│ ├─ 中序
│ └─ 后序

└─ BFS(广度优先)
└─ 层序

层序

先把一层的节点放进队列,
遍历这一层,
同时把这一层的子节点放进队列,
通过控制 size 决定是否是当前层的节点

👉 标准写法就是:

queue.offer(root);while(!queue.isEmpty()){intsize=queue.size();// 当前层节点数for(inti=0;i<size;i++){Nodecur=queue.poll();// 当前层节点process(cur);if(cur.left!=null)queue.offer(cur.left);if(cur.right!=null)queue.offer(cur.right);}// 到这里:一整层处理完}

30 秒遍历选择法(面试 / 刷题通用)

你只需要问 3 个问题,按顺序来。

✅ 第 1 问(最重要)
当前节点的结果,是否依赖子节点的结果?

换句话说: “我必须先知道孩子的情况,才能决定自己吗?” ✔️ 如果是 → 后序遍历(自底向上) ❌ 如果不是 → 继续问第2问 典型题目特征 删除目录/删除节点 计算高度、大小、最大路径和 判断是否为叶子 DP on tree 📌 你这道“删除目录”题,一句话就能命中这一问

✅ 第 2 问

我是否需要在“刚到这个节点”时就做事? 比如: 初始化 打印路径 把父节点的信息传给子节点 ✔️ 如果是 → 前序遍历(从头到尾) ❌ 如果不是 → 继续问第3问 典型题目特征 打印目录结构 路径和(从根到叶) 序列化树 拷贝树

✅ 第 3 问(基本只剩一种)

是否需要“左 → 中 → 右”的顺序性质? 一般只在 二叉搜索树 出现 ✔️ 是 → 中序遍历 ❌ 否 → 回到前序/后序中重新审视 📌 目录树、N叉树99%不用中序 🔥 一句话速记版(建议背) 用不用孩子的结果 → 后序 进门就干活 → 前序 要有序 → 中序 题1:删除目录(你已经做过) 给一棵目录树,只能删除叶子目录; 子目录删完后,父目录可能变成叶子并继续删除。

✅ 正确遍历

后序遍历

📌 判断一句话:

父目录是否可删,取决于子目录是否已删完 → 依赖子节点结果

题 2:计算一棵树的高度

树的高度定义为:
max(左子树高度, 右子树高度) + 1

✅ 正确遍历

后序遍历

📌 判断一句话:

当前节点的高度,必须等子树高度算完

题 3:打印目录结构(类似 tree 命令)

按层级打印所有目录名

✅ 正确遍历

前序遍历

📌 判断一句话:

一到节点就要打印,再处理子目录

题 4:判断一棵树是否是平衡二叉树

每个节点左右子树高度差 ≤ 1

✅ 正确遍历

后序遍历

📌 判断一句话:

是否平衡,取决于左右子树高度

题 5:输出二叉搜索树的升序序列

BST:左 < 根 < 右

✅ 正确遍历

中序遍历

📌 判断一句话:

只有中序才能保证有序输出

题 6:统计从根到叶子的所有路径

输出类似:A->B->C

✅ 正确遍历

前序遍历

📌 判断一句话:

路径信息要在“进入节点时”就加入

题 7:计算每个目录的总文件大小

目录大小 = 所有子目录大小 + 本目录文件大小

✅ 正确遍历

后序遍历

📌 判断一句话:

父目录大小依赖子目录大小

题 8:复制一棵树(深拷贝)

生成一棵结构和值完全一样的新树

✅ 正确遍历

前序遍历

📌 判断一句话:

必须先创建父节点,才能挂子节点

题 9:判断是否存在一条根到叶子的路径和等于 target

经典 Path Sum 题

✅ 正确遍历

前序遍历

📌 判断一句话:

累加路径和是在“向下走”的过程中完成的

题 10:求一棵树的最大路径和(可不经过根)

LeetCode Hard 级别

✅ 正确遍历

后序遍历

📌 判断一句话:

当前节点能提供的最大贡献,来自左右子树结果

🎯 你应该得到的“条件反射”

如果你现在回看这 10 题,发现:

后序遍历:凡是“算 / 判断 / 汇总 / 删除”

前序遍历:凡是“记录 / 传递 / 打印 / 构建”

中序遍历:几乎只在 BST 的“有序性”

👉 那说明你已经真的掌握了遍历选择

🧠 终极 30 秒判断口诀(压轴)

要结果 → 等孩子 → 后序
要过程 → 先自己 → 前序
要顺序 → BST → 中序

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

鸿蒙Electron跨设备实战:分布式数据流转与实时共享方案

我将围绕鸿蒙Electron应用的“跨设备数据流转”核心场景&#xff0c;结合鸿蒙分布式软总线特性&#xff0c;打造一篇侧重“实战操作场景落地”的技术文章&#xff0c;兼顾开发效率与功能实用性。 鸿蒙Electron跨设备实战&#xff1a;分布式数据流转与实时共享方案 一、核心原理…

作者头像 李华
网站建设 2026/6/10 17:21:19

41、Linux 系统管理与操作实用技巧

Linux 系统管理与操作实用技巧 在 Linux 系统的使用和管理过程中,会遇到各种各样的任务和问题。本文将为你介绍一些常见问题的解决方案,包括文件重命名、文档查看、文件解压、会话恢复、会话共享以及日志记录等方面。 1. 批量重命名文件 在实际操作中,有时需要批量重命名…

作者头像 李华
网站建设 2026/6/12 5:28:10

JavaScript反混淆终极指南:快速掌握decodeObfuscator的完整操作手册

JavaScript反混淆终极指南&#xff1a;快速掌握decodeObfuscator的完整操作手册 【免费下载链接】decodeObfuscator 项目地址: https://gitcode.com/gh_mirrors/de/decodeObfuscator 在当今Web安全领域&#xff0c;JavaScript代码反混淆技术已成为开发者必备的核心技能…

作者头像 李华
网站建设 2026/6/10 19:26:18

WordPress编辑器极速优化:5个智能配置让编辑体验飞起来

你是否曾经在WordPress编辑器中遇到过这样的场景&#xff1a;点击一个块要等几秒才有反应&#xff0c;添加图片时页面卡顿&#xff0c;甚至保存文章时浏览器直接崩溃&#xff1f;这些让人头疼的性能问题&#xff0c;正在悄悄消耗你的创作热情。 【免费下载链接】gutenberg The …

作者头像 李华
网站建设 2026/6/10 18:46:36

查看Gmail 的注册地区

通过谷歌的服务条款&#xff0c;查看你Gmail所在国家。 https://policies.google.com/terms?hlzh_CN

作者头像 李华
网站建设 2026/6/11 0:01:17

28、国际化文本功能与区域设置详解

国际化文本功能与区域设置详解 1. 国际化应用与本地化概述 国际化应用能够适应不同母语、当地习俗和字符串编码的需求。将操作适配特定母语、当地习俗或字符串编码的过程称为本地化。国际化的一个目标是允许在不修改程序源代码或重新编译的情况下进行本地化。 Xlib 作为本地…

作者头像 李华