二叉树遍历方式的本质差异在于节点访问时机不同:前序(根→左→右)适合边走边建,中序(左→根→右)天然适配bst排序,后序(左→右→根)强调先子后父,层序则按层推进并显式控制边界。

二叉树遍历方式的输出差异,本质是节点访问时机不同导致的变量处理逻辑变化。掌握这点,才能在写路径记录、数值累加、结构重建等题目时避免错位、重复或遗漏。
前序遍历:根最先,适合“边走边建”
访问顺序为 根 → 左子树 → 右子树。变量操作(如拼接路径、记录值)放在递归调用之前,意味着每次进入新节点就立即生效。
- 适用场景:复制树、生成前缀表达式、记录从根到当前节点的路径
- 关键逻辑:更新变量 → 递归左 → 递归右
- 注意点:若用于收集完整路径(如 root-to-leaf),需在叶子处保存副本,之后立刻回溯(如 list.pop() 或字符串切片)
中序遍历:根居中,天然适配排序逻辑
访问顺序为 左子树 → 根 → 右子树。变量操作夹在左右递归之间,使根节点总在左子树处理完后、右子树开始前被处理。
- 适用场景:BST 中获取升序序列、查找某值的前驱/后继、验证 BST 合法性
- 关键逻辑:递归左 → 更新变量 → 递归右
- 注意点:非 BST 时中序无序,但结构上仍保持“左-中-右”的相对位置约束
后序遍历:根最后,强调“先子后父”依赖
访问顺序为 左子树 → 右子树 → 根。变量操作放在两个递归调用之后,确保左右子树已完全处理完毕。
- 适用场景:计算子树节点数/和/高度、释放内存、判断平衡树、求最近公共祖先
- 关键逻辑:递归左 → 递归右 → 更新变量
- 注意点:返回值常携带子树信息(如高度、是否平衡),根节点基于这些结果做最终判断
层序遍历:按层推进,变量随队列节奏更新
不依赖递归栈,使用队列实现,每轮处理一层所有节点。变量更新与“层”绑定,而非单个节点的父子关系。
- 适用场景:找最小深度、打印每层节点、判断是否完全二叉树、Z 字形遍历
- 关键逻辑:每轮 for 循环处理当前队列长度的节点;新子节点入队,不影响本轮遍历
- 注意点:需显式控制层级边界(如用 size 记录本层节点数),否则容易混入下层节点










