二叉树的前序遍历

159 阅读3分钟

一、题目

给你二叉树的根节点 root ,返回它节点值的 前序 **遍历。

image.png

输入:root = [1,null,2,3]
输出:[1,2,3]
示例 2:

输入:root = []
输出:[]
示例 3:

输入:root = [1]
输出:[1]

来源:力扣(LeetCode) 链接:leetcode.cn/problems/bi… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、 思路

二叉树的前序遍历: 首先访问根节点,然后遍历左子树,最后遍历右子树。
二叉树的中序遍历:先遍历左子树,然后访问根节点,然后遍历右子树。
二叉树的后序遍历:先遍历左子树,然后遍历右子树,最后访问树的根节点。

例子

image.png

前序遍历: 首先访问根节点,然后遍历左子树,最后遍历右子树。

  • 首先的第一个节点应该是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

四、测试结果

image.png