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,#,#,15,7}
,
3 / \ 9 20 / \ 15 7
return its bottom-up level order traversal as:
[ [15,7] [9,20], [3], ]
confused what "{1,#,2,3}"
means? > read more on how binary tree is serialized on OJ.
---
同basic travel by level, 只不过最后把arraylist reverse一下
---
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public ArrayList<ArrayList<Integer>> levelOrderBottom(TreeNode root) { ArrayList<ArrayList<Integer>> rst = new ArrayList<ArrayList<Integer>>(); helper(root, 0, rst); //reverse the arraylist Collections.reverse(rst); return rst; } private void helper(TreeNode node, int level, ArrayList<ArrayList<Integer>> rst){ if(node == null) return; ArrayList<Integer> list = null; if(rst.size() == level){ // a new level list = new ArrayList<Integer>(); list.add(node.val); rst.add(list); }else{ list = rst.get(level); list.add(node.val); } helper(node.left, level+1, rst); helper(node.right, level+1, rst); } }