跳到主要内容

107. 二叉树的层次遍历 II [easy]

107. 二叉树的层次遍历 II [easy]

https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii/

给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)

例如: 给定二叉树 [3,9,20,null,null,15,7],

    3
/ \
9 20
/ \
15 7

返回其自底向上的层次遍历为:

[
[15,7],
[9,20],
[3]
]

通过次数64,586 | 提交次数98,150

First Try

2020-06-26

参考103的方法,使用None变量进行分层,其他就是一个普通的BFS遍历了,而BFS遍历重点在于queue的使用。贡献了一次错误提交,因为判断root是否无效的时候,忽略了root.val为0和None之间的区别。

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

class Solution(object):
def levelOrderBottom(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
if not (root and root.val is not None):
return []
queue = [root, None]
col = [[]]
while len(queue):
node = queue.pop(0)
if node is None:
if len(queue):
queue.append(None)
col.append([])
continue
col[-1].append(node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
return list(reversed(col))

  • 执行用时:20 ms, 在所有 Python 提交中击败了82.51%的用户
  • 内存消耗:13.1 MB, 在所有 Python 提交中击败了33.33%的用户