一、题目
给你二叉树的根节点 root
,返回它节点值的 前序 **遍历。
输入:root = [1,null,2,3]
输出:[1,2,3]
示例 2:
输入:root = []
输出:[]
示例 3:
输入:root = [1]
输出:[1]
来源:力扣(LeetCode) 链接:leetcode.cn/problems/bi… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、 思路
二叉树的前序遍历: 首先访问根节点,然后遍历左子树,最后遍历右子树。
二叉树的中序遍历:先遍历左子树,然后访问根节点,然后遍历右子树。
二叉树的后序遍历:先遍历左子树,然后遍历右子树,最后访问树的根节点。
例子
前序遍历: 首先访问根节点,然后遍历左子树,最后遍历右子树。
- 首先的第一个节点应该是F
- 然后遍历左子树,这里左子树是B
- 根据规则B有左右子树,那么就先左子树A
- 现在A子树没有左右子树,那么返回B子树,开始访问B子树的右节点D
- D有左右子树,先左子树C,然后右子树E
- 这时已经遍历完了F根节点的所有左子树,开始访问右子树
- G,I都是单节点,因此依次访问,I只有左子树,那么就访问左子树H
- 因此,这里的顺序是F-B-A-D-C-E-G-I-H
中序遍历: 先遍历左子树,然后访问根节点,然后遍历右子树。
- 根据规则先遍历左子树,首先第一个为A
- 接下来访问根节点B,这是发现B还有子节点
- 再根据规则先左子树C,然后根节点D,最后右子树E
- 这是左子树都遍历完了,开始遍历根节点F
- 然后根据规则访问G,当访问到I时,这会因为I有左子树,因此应该是H-I
- 因此顺序应该是:A-B-C-D-E-F-G-H-I 后序遍历:先遍历左子树,然后遍历右子树,最后访问树的根节点。
- 根据规则,先访问左子树,那么就是A,这是应该访问右子树,因此是D,但是D还有子树,那么应该是D的左子树C
- 接下来就是D的右子树E
- 然后是根节点D-B,
- 之后访问到了F节点,但是F节点有右子树,那么就应该是G,但是G也有右子树,最后应该是H
- 然后回来根节点I-G-H
- 因此属性应该是:A-C-E-D-B-H-I-G-F
- 通过递归处理数据
- 首先root.left访问根节点的左子树
- 然后root.right访问根节点的右子树
- 如果遇到节点为null,循环截止
三、代码
递归代码
"""
二叉树的的前序遍历: 先访问根节点---左子树--- 右子树
"""
class Solution:
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
def recursion(root: TreeNode):
if not root: return
result.append(root.val)
recursion(root.left)
recursion(root.right)
result = list()
recursion(root)
return result