方法一:直接用广度遍历bfs的方法遍历二叉树,从上到下,从左到右,把每一层的元素存在一个数组中,然后再把这些数组存入一个数组,最后数组使用reverse()方法倒序或者数组切片逆序[::-1]即可。
# 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:
return []
stack,res = [root],[]
while stack:
long = len(stack)
i =0
ans =[]
while i < long:
node = stack.pop(0)
ans.append(node.val)
if node.left:
stack.append(node.left)
if node.right:
stack.append(node.right)
i+=1
res.append(ans)
return res[::-1]
此方法时间由于使用了[::-1],所以时间复杂度很高。
方法二:
class Solution(object):
def levelOrderBottom(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
if not root:
return []
stack,res = [root],[]
while stack:
long = len(stack)
i =0
ans =[]
while i < long:
node = stack.pop(0)
ans.append(node.val)
if node.left:
stack.append(node.left)
if node.right:
stack.append(node.right)
i+=1
res=[ans]+res
return res