/**
* Time complexity : O(N) since each node is processed exactly once.
* Space complexity : O(N) to keep the output structure which contains N
* node values.
*/
class Solution {
public List<List<Integer>> levelOrderBottom(TreeNode root) {
List<List<Integer>> resultList = new ArrayList();
if(root != null) {
levelOrderBottom(resultList, root, 0);
Collections.reverse(resultList);
}
return resultList;
}
private void levelOrderBottom(List<List<Integer>> resultList,
TreeNode node,
int level) {
if(resultList.size() == level) {
resultList.add(new ArrayList<Integer>());
}
resultList.get(level).add(node.val);
if(node.left != null) {
levelOrderBottom(resultList, node.left, level+1);
}
if(node.right != null) {
levelOrderBottom(resultList, node.right, level+1);
}
}
}