leecode#二叉树的前序遍历#二叉树后续遍历

题目描述:

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

分析:先序遍历,根左右

按照访问根节点——左子树——右子树的方式遍历这棵树,而在访问左子树或者右子树的时候,我们按照同样的方式遍历,直到遍历完整棵树。因此整个遍历过程天然具有递归的性质,我们可以直接用递归函数来模拟这一过程。

定义 preorder(root) 表示当前遍历到 root 节点的答案。按照定义,我们只要首先将 root 节点的值加入答案,然后递归调用 preorder(root.left) 来遍历 root 节点的左子树,最后递归调用 preorder(root.right) 来遍历 root 节点的右子树即可,递归终止的条件为碰到空节点。

代码:

class Solution:
    def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        def preorder(root:TreeNode):
            if root is None:
                return None
            res.append( root.val) 
            preorder(root.left)
            preorder(root.right)
        
        res = list()
        preorder(root)
        return res

题目描述:

给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 

分析:后序遍,左右根。思路与中序遍历很像,参考之前的

代码:

class Solution:
    def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        if not root:
            return []
        
        res = []
        res.extend(self.postorderTraversal(root.left))
        res.extend(self.postorderTraversal(root.right))
        res.append(root.val)

        return res 

你可能感兴趣的:(算法,数据结构,leetcode)