Java:
class Solution {
public List<List<Integer>> levelOrderBottom(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<TreeNode>();
List<List<Integer>> anslist = new LinkedList<List<Integer>>();
if (root == null) return anslist;
queue.offer(root); // .offer 添加一个元素并返回true,如果队列已满,则返回false
while (!queue.isEmpty()){
int len = queue.size();
List<Integer> partlist = new LinkedList<Integer>();
while (len>0){
if(queue.peek().left!=null) queue.offer(queue.peek().left);
if(queue.peek().right!=null) queue.offer(queue.peek().right);
partlist.add(queue.poll().val); //.poll 移除并返问队列头部的元素,如果队列为空,则返回null
len--;
}
anslist.add(0,partlist); //add(i,E) 方法将指定的元素E在此列表中的指定位置i
}
return anslist;
}
}
Python:
class Solution:
def levelOrderBottom(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
queue = collections.deque([(root, 0)])
res = []
while queue:
node, level = queue.popleft()
if node:
if len(res) < level+1:
res.insert(0, [])
res[-(level+1)].append(node.val)
queue.append((node.left, level+1))
queue.append((node.right, level+1))
return res