题目描述:
给定一个二叉树,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历。
示例:
给定二叉树 [3,9,20,null,null,15,7],
3
/
9 20
/
15 7
返回其自底向上的层序遍历为:
[
[15,7],
[9,20],
[3]
]
思路:
与题102的思路相同,只需要将之前的结果,进行倒转即可,倒转的方式可以用list的[::-1].
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def levelOrderBottom(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
if not root:
return []
queue = []
result = [[]]
queue.append((root, 0))
max_level = 0
while queue:
root, curr_level = queue.pop(0)
result[curr_level].append(root.val)
if root.left:
queue.append((root.left, curr_level + 1))
if root.right:
queue.append((root.right, curr_level + 1))
if root.left or root.right:
if curr_level + 1 > max_level:
max_level = max_level + 1
result.append([])
return result[::-1]
也可以参考一下给的示例答案:
class Solution:
def levelOrderBottom(self, root: TreeNode) -> List[List[int]]:
levelOrder = list()
if not root:
return levelOrder
q = collections.deque([root])
while q:
level = list()
size = len(q)
for _ in range(size):
node = q.popleft()
level.append(node.val)
if node.left:
q.append(node.left)
if node.right:
q.append(node.right)
levelOrder.append(level)
return levelOrder[::-1]