力扣 144. 二叉树的前序遍历

Posted 团子大圆帅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了力扣 144. 二叉树的前序遍历相关的知识,希望对你有一定的参考价值。

144. 二叉树的前序遍历

题目描述

给定一个二叉树,返回它的前序遍历。

示例:

输入: [1,null,2,3]  
1
\
2
/
3

输出: [1,2,3]

进阶: 递归算法很简单,你可以通过迭代算法完成吗?


递归版前序遍历

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def preorderTraversal(self, root: TreeNode) -> List[int]:
        res = []
        def preorder(node):
            if node is None:
                return
            res.append(node.val)
            preorder(node.left)
            preorder(node.right)
        return preorder(root) or res

运行结果:

执行结果:通过
执行用时:48 ms, 在所有 Python3 提交中击败了17.69% 的用户
内存消耗:13.6 MB, 在所有 Python3 提交中击败了5.01% 的用户


递归版一行解

最爱的力扣一行解系列。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def preorderTraversal(self, root: TreeNode) -> List[int]:
        return [root.val] + self.preorderTraversal(root.left) + self.preorderTraversal(root.right) if root else []

运行结果:

执行结果:通过
执行用时:28 ms, 在所有 Python3 提交中击败了99.15% 的用户
内存消耗:13.5 MB, 在所有 Python3 提交中击败了5.01% 的用户


迭代版前序遍历

这里用到了类型区分法,只要掌握了这种方法,二叉树迭代遍历就如砍瓜切菜般简单,它是颜色标记法的改良版。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def preorderTraversal(self, root: TreeNode) -> List[int]:
        res, q = [], [root]
        while q:
            node = q.pop()
            if isinstance(node, TreeNode):
                q.extend([node.right, node.left, node.val])
            elif isinstance(node, int):
                res.append(node)
        return res

运行结果:

执行结果:通过
执行用时:36 ms, 在所有 Python3 提交中击败了87.61% 的用户
内存消耗:13.6 MB, 在所有 Python3 提交中击败了5.01% 的用户


2020.10.27


以上是关于力扣 144. 二叉树的前序遍历的主要内容,如果未能解决你的问题,请参考以下文章

力扣 - 144二叉树的前序遍历

二叉树有关习题整理 144二叉树的前序遍历 100相同的树 101对称二叉树 110平衡二叉树 958二叉树的完全性检验 662二叉树的最大宽度

精选力扣500题 第55题 LeetCode 144. 二叉树的前序遍历c++/java详细题解

LeetCode-144-二叉树的前序遍历

二叉树的非递归遍历怎么写?

144_二叉树的前序遍历