二叉树遍历常见的3中遍历方式:「二叉树的前序遍历」、「二叉树的中序遍历」 和 「二叉树的后续遍历」, 此外按照层序方式(按照层次从上至下,每一层从左至右)对二叉树进行遍历,这种方式叫做 「二叉树的层序遍历」。下面分别介绍二叉树的递归解法和迭代解法。
1. 递归解法
144. 二叉树的前序遍历
给你二叉树的根节点 root
,返回它节点值的 前序 遍历。
示例 1:
1 | 输入:root = [1,null,2,3] |
代码(递归解法):
1 | class Solution: |
94. 二叉树的中序遍历
给定一个二叉树的根节点 root
,返回 它的 中序 遍历 。
示例 1:
1 | 输入:root = [1,null,2,3] |
代码(递归解法):
1 | class Solution: |
145. 二叉树的后序遍历
给你一棵二叉树的根节点 root
,返回其节点值的 后序遍历 。
示例 1:
1 | 输入:root = [1,null,2,3] |
代码(递归解法):
1 | class Solution: |
2. 迭代解法(颜色标记法)
颜色标记法的核心思想如下:
- 用颜色标记节点的状态,新节点为白色,已访问节点为灰色
- 如果遇到未访问的节点,则将其标记为白色,然后将左子节点,右子节点,自身节点压入栈中
- 如果遇到的节点为灰色,则将节点的值输出
1 | class Solution: |
1 | def inorderTraversal(self, root: TreeNode) -> List[int]: |
1 | def postorderTraversal(self, root: TreeNode) -> List[int]: |
102. 二叉树的层序遍历
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
示例 1:
1 | 输入:root = [3,9,20,null,null,15,7] |
颜色标记法:
1 | class Solution: |
103. 二叉树的锯齿形层序遍历
给你二叉树的根节点 root
,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
示例 1:
1 | 输入:root = [3,9,20,null,null,15,7] |
分析:层次遍历的变种,比较简单。
1 | class Solution: |
107. 二叉树的层序遍历 II
给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
示例 1:
1 | 输入:root = [3,9,20,null,null,15,7] |
分析:和层次遍历一样的做法,只需要将得到的res数组做一次处理既可。