代码随想录算法训练营第13天|二叉树Part01
本文主要介绍了二叉树的存储和遍历方法。
二叉树储存方法
二叉树可以链式存储,也可以顺序存储。
二叉树遍历方法
1.深度优先遍历 DFS
- 前序遍历(递归法,迭代法)
- 中序遍历(递归法,迭代法)
- 后序遍历(递归法,迭代法)
2.广度优先遍历 BFS
- 层次遍历(迭代法)
1 | var preorderTraversal = function(root) { |
1 | var preorderTraversal = function(root, res = []) { |
1 | var inorderTraversal = function(root) { |
1 | var inorderTraversal = function(root, res = []) { |
1 | var postorderTraversal = function(root) { |
1 | var postorderTraversal = function(root, res = []) { |
1 | var levelOrder = function(root) { |
常见用途
遍历类型 | 常见用途 |
---|---|
前序遍历 DFS | 构造路径、序列化树、翻转、复制树等 |
中序遍历 DFS | 二叉搜索树(BST)相关操作,如验证、有序性恢复等 |
后序遍历 DFS | 删除树、计算深度、后置汇总型操作等 |
层序遍历 BFS | 按层输出、最短路径、分层汇总、节点可见性等问题 |
特性对比
对比维度 | 深度优先遍历(DFS) | 广度优先遍历(BFS) |
---|---|---|
遍历顺序控制 | 顺序灵活:可先左后右, 也可先右后左 |
顺序固定: 逐层从左到右,从上到下 |
实现方式 | 递归(利用系统调用栈) 或显式使用栈模拟 |
显式使用队列迭代实现 |
路径构造 | 可通过递归参数或栈自动记录 路径,天然支持根到叶路径 |
需显式记录路径(通常需 额外数组或字符串同步) |
信息传递能力 | 子调用可通过参数或返回值传递 信息,便于处理父子关联逻辑 |
当前仅处理一个节点, 无法感知同层其他节点信息 |
适合的题型 | 结构型问题:如树高计算、 路径和、镜像翻转、构造路径、 子结构判断等 |
层级型问题:如每层最大值、 最短路径、层序遍历、 右视图等 |
可否中途返回 | 支持灵活剪枝(如:找到 目标路径即返回) |
可中途 break, 但路径信息管理较复杂 |
显式结构需求 | 递归时依赖调用栈即可 迭代需手动维护栈结构 |
必须使用显式队列 维护节点状态 |