二叉树的前序、中序和后序遍历是访问树中所有节点的三种核心方式,其根本区别在于访问 根节点 的时机:前序遍历先访问根节点,中序遍历在左右子树之间访问根节点,后序遍历最后访问根节点。这种顺序差异不仅决定了实现逻辑,也影响了它们的应用场景。
三种遍历的核心逻辑可以用“口诀”概括,其递归实现仅需调整访问根节点的位置:
| 遍历方式 | 顺序口诀 | 递归实现代码(Python) |
|---|---|---|
| 前序遍历 | 根 → 左 → 右 | def pre_order(root): if root: print(root.val) pre_order(root.left) pre_order(root.right) |
| 中序遍历 | 左 → 根 → 右 | def in_order(root): if root: in_order(root.left) print(root.val) in_order(root.right) |
| 后序遍历 | 左 → 右 → 根 | def post_order(root): if root: post_order(root.left) post_order(root.right) print(root.val) |
示例:对于根节点为 1、左子节点 2、右子节点 3 的二叉树(1->2->3):
前序遍历结果:1, 2, 3(先根,再左,后右)
中序遍历结果:2, 1, 3(先左,再根,后右)
后序遍历结果:2, 3, 1(先左,再右,后根)
递归遍历简洁但可能受限于栈深度,非递归实现需用栈模拟递归过程,核心是控制节点入栈和出栈的时机:
思路:先访问根节点,再将右子树入栈,最后左子树入栈(利用栈的 FILO 特性确保左子树先处理)。
PYTHON
前的基本解释
前
⒈ 指空间,人面所向的一面;房屋等正门所向的一面;家具等靠外的一面,与“后”相对:前面。前边。前方。面前。前进。前程。
⒉ 指时间,过去的,往日的,与“后”相对:以前。前人。前此。前科。前嫌。前言。前车之鉴。
⒊ 顺序在先的:前五名。
⒋ 向前行进:勇往直前。
former、forward、front、preceding、restrain
后
会意
in front, forward; preceding