144.二叉树的前序遍历

中 左 右

class Solution:
    def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        res = []

        def dfs(node): #确定递归函数的参数和返回值
            if node is None:  #确定终止条件
                return
            
            #确定单层递归的逻辑
            res.append(node.val)
            dfs(node.left)
            dfs(node.right)
        dfs(root)
        return res

94.二叉树的中序遍历

左 中 右

class Solution:
    def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        res = []

        def dfs(node):
            if node is None:
                return
            
            dfs(node.left)
            res.append(node.val)
            dfs(node.right)
        dfs(root)
        return res

145.二叉树的后序遍历

左 右 中

class Solution:
    def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        res = []

        def dfs(node):
            if node is None:
                return
            
            dfs(node.left)
            dfs(node.right)
            res.append(node.val)

        dfs(root)
        return res