遍历顺序
前序遍历:根左右
中序遍历:左根右
后序遍历:左右根
注:遍历的顺序不用刻意去记,根在哪个位置就代表是什么遍历,遍历一般都是先左后右。
遍历规则
以前不是很理解是按什么规则就开始遍历某个节点或者怎么就突然跳到了另一个节点的
最近有些新感悟:
二叉树的 前序遍历、中序遍历 和 后序遍历 是三种常见的深度优先遍历(DFS)方法。它们的核心区别在于 访问节点的顺序不同,但它们的查找规则都是基于 深度优先 的原则,即从根节点开始,尽可能深地访问每个分支,直到到达叶子节点,然后再回溯到上一个节点继续遍历。
1. 前序遍历(Preorder Traversal)
查找规则:
- 访问当前节点(根节点)。
- 递归遍历左子树。
- 递归遍历右子树。
特点:
- 先访问根节点,再访问左子树和右子树。
- 适合用于 复制树 或 序列化树。
示例:
对于以下二叉树:
1
/ \
2 3
/ \
4 5
前序遍历的结果是:[1, 2, 4, 5, 3]
查找过程:
访问根节点 1
。
遍历左子树(以 2
为根):
访问节点 2
。
遍历左子树(以 4
为根):
访问节点 4
。
遍历右子树(以 5
为根):
访问节点 5
。
遍历右子树(以 3
为根):
访问节点 3
。
2. 中序遍历(Inorder Traversal)
查找规则:
- 递归遍历左子树。
- 访问当前节点(根节点)。
- 递归遍历右子树。
特点:
- 先访问左子树,再访问根节点,最后访问右子树。
- 对于 二叉搜索树(BST),中序遍历的结果是一个 升序序列。
示例:
对于以下二叉树:
1
/ \
2 3
/ \
4 5
中序遍历的结果是:[4, 2, 5, 1, 3]
查找过程:
遍历左子树(以 2
为根):
遍历左子树(以 4
为根):
访问节点 4
。
访问节点 2
。
遍历右子树(以 5
为根):
访问节点 5
。
访问根节点 1
。
遍历右子树(以 3
为根):
访问节点 3
。
3. 后序遍历(Postorder Traversal)
查找规则:
- 递归遍历左子树。
- 递归遍历右子树。
- 访问当前节点(根节点)。
特点:
- 先访问左子树和右子树,最后访问根节点。
- 适合用于 删除树 或 计算表达式树。
示例:
对于以下二叉树:
1
/ \
2 3
/ \
4 5
后序遍历的结果是:[4, 5, 2, 3, 1]
查找过程:
遍历左子树(以 2
为根):
遍历左子树(以 4
为根):
访问节点 4
。
遍历右子树(以 5
为根):
访问节点 5
。
访问节点 2
。
遍历右子树(以 3
为根):
访问节点 3
。
访问根节点 1
。
查找规则总结
遍历方式 | 查找规则 | 访问顺序 | 适用场景 |
前序遍历 | 根 -> 左 -> 右 | 根节点 -> 左子树 -> 右子树 | 复制树、序列化树 |
中序遍历 | 左 -> 根 -> 右 | 左子树 -> 根节点 -> 右子树 | 二叉搜索树的升序输出 |
后序遍历 | 左 -> 右 -> 根 | 左子树 -> 右子树 -> 根节点 | 删除树、计算表达式树 |
示例二叉树
1
/ \
2 3
/ \
4 5
- 前序遍历:
1, 2, 4, 5, 3
- 中序遍历:
4, 2, 5, 1, 3
- 后序遍历:
4, 5, 2, 3, 1
总结
- 前序遍历:先访问根节点,再访问左子树和右子树。
- 中序遍历:先访问左子树,再访问根节点,最后访问右子树。
- 后序遍历:先访问左子树和右子树,最后访问根节点。