树是编程中非常基础且重要的数据结构,比如我们熟悉的文件目录、二叉搜索树、数据库索引等都用到了树的结构。而“遍历”,就像我们逛公园时要把所有景点都走一遍一样,是指访问树中每个节点的过程。今天我们就来聊聊树的遍历,特别是最常见的前序、中序、后序遍历,让你轻松理解它们的区别和用法。

树的基本概念

首先,我们简单回顾下树的结构:
树由节点组成,每个节点可以有0个或多个子节点(子树),最顶层的节点叫“根”,没有子节点的节点叫“叶子”。这里我们主要讨论二叉树(每个节点最多有2个子节点:左子树和右子树)。

遍历的核心:访问顺序

三种遍历方式的区别,核心在于访问根节点的时机。我们用一个具体的二叉树例子来演示,这个树的结构如下(根是1,左子树根是2,右子树根是3;2的左是4,右是5;3的左是6,右是7):

        1
      /   \
     2     3
    / \   / \
   4   5 6   7

1. 前序遍历(Pre-order):根 → 左 → 右

规则:先访问根节点,再递归遍历左子树,最后递归遍历右子树。
步骤
- 访问根节点1;
- 递归遍历左子树(根是2):访问2,再遍历2的左子树(4),再遍历2的右子树(5);
- 递归遍历右子树(根是3):访问3,再遍历3的左子树(6),再遍历3的右子树(7)。

结果:1 → 2 → 4 → 5 → 3 → 6 → 7。

2. 中序遍历(In-order):左 → 根 → 右

规则:先递归遍历左子树,再访问根节点,最后递归遍历右子树。
步骤
- 递归遍历左子树(根是2):先遍历2的左子树(4),访问2,再遍历2的右子树(5);
- 访问根节点1;
- 递归遍历右子树(根是3):先遍历3的左子树(6),访问3,再遍历3的右子树(7)。

结果:4 → 2 → 5 → 1 → 6 → 3 → 7。

3. 后序遍历(Post-order):左 → 右 → 根

规则:先递归遍历左子树,再递归遍历右子树,最后访问根节点。
步骤
- 递归遍历左子树(根是2):先遍历2的左子树(4),再遍历2的右子树(5),最后访问2;
- 递归遍历右子树(根是3):先遍历3的左子树(6),再遍历3的右子树(7),最后访问3;
- 访问根节点1。

结果:4 → 5 → 2 → 6 → 7 → 3 → 1。

三种遍历的对比

为了更清晰,我们用口诀和结果总结:

遍历方式 核心顺序 记忆口诀 例子树结果
前序遍历 根 → 左 → 右 根左右 1,2,4,5,3,6,7
中序遍历 左 → 根 → 右 左根右 4,2,5,1,6,3,7
后序遍历 左 → 右 → 根 左右根 4,5,2,6,7,3,1

关键记忆点:前序(根在前)、中序(根在中)、后序(根在后)。

遍历的实际应用

理解遍历的目的,能帮助我们更快掌握其用法:
- 前序遍历:常用于复制树结构(比如深拷贝二叉树时,先复制根,再复制左右子树)。
- 中序遍历:在二叉搜索树(左子树值 < 根值 < 右子树值)中,中序遍历会得到从小到大的有序序列,是排序的核心逻辑之一。
- 后序遍历:常用于删除节点或计算树的深度(比如删除节点时,需先删除左右子树,再删除根节点)。

总结

树的遍历本质是递归思想的应用——把大问题分解为小问题,每个子树都按同样规则处理。刚开始可能觉得绕,但多画几次树、用具体例子走一遍,很快就能熟练。记住三种遍历的顺序(根左右、左根右、左右根),结合应用场景(比如中序遍历的排序、后序遍历的删除),你就能轻松掌握树的遍历啦!

小夜