Leetcode刷题Python102. 二叉树的层序遍历

Posted Better Bench

tags:

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

1 题目

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

示例 1:

输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]

示例 2:

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

示例 3:

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

2 解析

(1)方法一:广度优先搜索,递归遍历,用一个二元组 (node, level) 来表示状态,它表示某个节点和它所在的层数,每个新进队列的节点的 level 值都是父亲节点的 level 值加一。最后根据每个点的 level 对点进行分类

(2)方法二:双端队列,双端队列是一个可以在队列任意一端插入元素的队列。在广度优先搜索遍历当前层节点拓展下一层节点的时候我们从左往右按顺序拓展。

3 Python实现

(1)方法一

def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
   
    if  not root:
       return []
    def dfs(node,level):
        if len(queue_tree)<level:
            queue_tree.append([])
        queue_tree[level-1].append(node.val)
        if node.left is not None:
            dfs(node.left,level+1)
        if node.right is not None:
            dfs(node.right, level+1)
    queue_tree = []
    dfs(root,1)
    return queue_tree

(2)方法二

def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
    q = deque([root])
    res = []
    while q and q[0]:
        n = len(q)
        tmp = []
        for _ in range(n):
            node = q.popleft()
            tmp.append(node.val)
            if node.left:
                q.append(node.left)
            if node.right:
                q.append(node.right)
        res.append(tmp)
    return res
            

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

Leetcode刷题100天—102. 二叉树的层序遍历(二叉树)—day09

LeetCode Java刷题笔记—102. 二叉树的层序遍历

刷题-力扣-102. 二叉树的层序遍历

LeetCode Java刷题笔记—103. 二叉树的锯齿形层序遍历

LeetCode刷题模版:101 - 110

LeetCode刷题模版:101 - 110