二叉树的三种深度遍历——前序 / 中序 / 后序——只有一个区别:什么时候访问当前节点。
| 顺序 | 访问时机 | 这棵 BST 上的结果 |
|---|---|---|
| 前序 (pre) | 先访问自己,再递归左、右子树 | 5, 3, 1, 4, 8, 7, 9 |
| 中序 (in) | 递归左子树 → 访问自己 → 递归右子树 | 1, 3, 4, 5, 7, 8, 9 |
| 后序 (post) | 递归左、右子树 → 最后访问自己 | 1, 4, 3, 7, 9, 8, 5 |
中序遍历 BST 得到升序序列——这不是巧合,是 BST 性质(左 < 根 < 右)和中序”左根右”顺序的直接产物。
工作方式
三种遍历共用一份递归代码,唯一变化是把 visit(node) 放在递归调用的哪一侧(左前、左右之间、还是右后)。看动画里的代码块——切换顺序时只是高亮的行换了位置。
复杂度
- 时间:O(n)(每个节点恰好访问一次)
- 空间:O(h),其中 h 是树高(递归栈深度)
在动画里看什么
- 深蓝节点 = 当前正在
visit的节点(脉冲光晕) - 浅蓝节点 + 加粗边框 = 当前在调用栈上(从根到当前激活的递归调用的整条路径)
- 冷→暖渐变 = 已访问节点,颜色深浅反映访问顺序
- 上方按钮切换三种顺序——同一棵树,看清楚区别
- 下方的访问顺序列表实时累积