题目描述
Given a binary tree, return the bottom-up level order traversal of its nodes’ values. (ie, from left to right, level by level from leaf to root).
For example:
Given binary tree [3,9,20,null,null,15,7]
,
3
/ \
9 20
/ \
15 7
return its bottom-up level order traversal as:
[
[15,7],
[9,20],
[3]
]
解题思路
给定一个二叉树,将树的每层元素放在集合List<Integer>
中,再将每层元素集合放在大集合中List<List<Integer>>
只不过是从最底层开始向顶层放入。
因为与层有关,所以就用队列就可以了。
class Solution {
public List<List<Integer>> levelOrderBottom(TreeNode root) {
List<List<Integer>> list = new ArrayList<>();
if(root == null) return list;
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while(queue.size() > 0) {
int size = queue.size();
List<Integer> l = new ArrayList<>();
for(int i = 0; i < size; i++) {
TreeNode tn = queue.poll();
l.add(tn.val);
if(tn.left != null)
queue.add(tn.left);
if(tn.right != null)
queue.add(tn.right);
}
//因为从底层往上层放,所以这里只要每次都放在List的第一个位置就可以了,原来的元素会自动向后存放
list.add(0, l);
}
return list;
}
}