leetcode 144. Binary Tree Preorder Traversal

Given a binary tree, return the preorder traversal of its nodes' values.

Example:

Input: [1,null,2,3]
   1
    \
     2
    /
   3

Output: [1,2,3]

Output: [1,2,3]
Follow up: Recursive solution is trivial, could you do it iteratively?

python代码

这个题是用递归求先序遍历。
里面涉及到extend的用法 而extendappend是有差别的。extendappend的差别

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

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

也可以建立一个函数,用于递归遍历:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def preorderTraversal(self, root: TreeNode) -> List[int]:
        nums = []
        self.DFS(root, nums)
        return nums
    def DFS(self, root, nums):
        if root:
            nums.append(root.val)
            self.DFS(root.left, nums)
            self.DFS(root.right, nums)

PS:

在这个题中如果把extend改为append,将会出错,因为这样最后会得到一个广义表(里面会有null)。
比如,在上面的样例中,如果用append。最后会得到:
[1,[],[2,[3,[],[]],[]]],
如果把方括号改为圆括号,这个就是利用先序遍历表示二叉树的广义表。(广义表是一个递归的表,其含义可以见于严蔚敏的数据结构一书,也可以上网查)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容