(1过,隐蔽错误花时间很多,简单题目本应很快,下次注意红色错误的地方)
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
例如:
给定二叉树: [3,9,20,null,null,15,7]
,
3 / 9 20 / 15 7
返回其层次遍历结果:
[ [3], [9,20], [15,7] ]
public static ArrayList<ArrayList<Integer>> levelOrder(TreeNode root) { ArrayList<ArrayList<Integer>> res = new ArrayList<>(); if (root == null) { return res; } Queue<TreeNode> queue = new LinkedList<>(); queue.add(root); while(queue.size() > 0) { ArrayList<Integer> list = new ArrayList<>(); int size = queue.size(); // 之前写成了for (int i=0;i<queue.size();i++),而for循环内会让queue的size变化,很隐蔽的错误。应该先把size固定下来 for (int i=0;i<size;i++) { TreeNode node = queue.poll(); list.add(node.val); if (node.left != null) queue.add(node.left); if (node.right != null) queue.add(node.right); } res.add(list); } return res; }
原文:https://www.cnblogs.com/twoheads/p/10594024.html