犯了两个错误,一个是node为null时,仍然把left和right往queue里放,空指针错误。一个是到最后一层,节点的left和right都是null,那么新建的ArrayList就是空,不该往结果里放。
此题DFS也可,就是把层次传进去:
public class Solution { public ArrayList> levelOrderBottom(TreeNode root) { ArrayList > ans = new ArrayList >(); Queue queue = new LinkedList (); queue.offer(root); int lastLevel = 1; int thisLevel = 0; ArrayList tmp = new ArrayList (); 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 (); } } 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; }}