[leetcode]Binary Tree Level Order Traversal II
犯了两个错误,一个是node为null时,仍然把left和right往queue里放,空指针错误。一个是到最后一层,节点的left和right都是null,那么新建的ArrayList就是空,不该往结果里放。
此题DFS也可,就是把层次传进去:http://discuss.leetcode.com/questions/275/binary-tree-level-order-traversal-ii
public class Solution { public ArrayList<ArrayList<Integer>> levelOrderBottom(TreeNode root) { ArrayList<ArrayList<Integer>> ans = new ArrayList<ArrayList<Integer>>(); Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.offer(root); int lastLevel = 1; int thisLevel = 0; ArrayList<Integer> tmp = new ArrayList<Integer>(); while (queue.size() != 0) { TreeNode n = queue.poll(); lastLevel--; if (n != null) { tmp.add(n.val); queue.offer(n.left); queue.offer(n.right); thisLevel += 2; } if (lastLevel == 0) { lastLevel = thisLevel; thisLevel = 0; if (tmp.size() != 0) { ans.add(tmp); } tmp = new ArrayList<Integer>(); } } int len = ans.size(); for (int i = 0; i < len/2; i++) { tmp = ans.get(i); ans.set(i, ans.get(len - i - 1)); ans.set(len - i - 1, tmp); } return ans; } }