public List<List<Integer>> levelOrderBottom(TreeNode root) {
List<List<Integer>> result = new LinkedList<>();
if (root == null){
return result;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
int level = 0;
while (!queue.isEmpty()){
result.add(new LinkedList<>());
int size = queue.size();
List<Integer> list = result.get(level);
for (int i = 0; i < size; i++){
TreeNode poll = queue.poll();
list.add(poll.val);
if (poll.left != null){
queue.add(poll.left);
}
if (poll.right != null){
queue.add(poll.right);
}
}
level++;
}
Collections.reverse(result);
return result;
}