classSolution{ public List<List<Integer>> ans = new ArrayList<>(); public List<List<Integer>> levelOrder(TreeNode root) { if (root == null) { returnnew ArrayList<>(); }
List<List<Integer>> res = new ArrayList<>(); Queue<TreeNode> deq = new LinkedList<>(); deq.offer(root);
while (!deq.isEmpty()) { int length = deq.size(); List<Integer> level = new ArrayList<>(); for (int i = 0; i < length; i++) { TreeNode node = deq.poll(); assert node != null; level.add(node.val); if (node.left != null) { deq.offer(node.left); } if (node.right != null) { deq.offer(node.right); } } res.add(level); } return res; } }
复杂度分析
记树上所有节点的个数为 n。
时间复杂度:每个点进队出队各一次,故渐进时间复杂度为 O(n)。
空间复杂度:队列中元素的个数不超过 n 个,故渐进空间复杂度为 O(n)。
方法二:深度优先搜索
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
publicclassSolution2{ List<List<Integer>> ans = new ArrayList<>(); public List<List<Integer>> levelOrder(TreeNode root) { helper(root, 0); return ans; }
privatevoidhelper(TreeNode root, int level){ if (root == null) { return; } if (ans.size() == level) { ans.add(new ArrayList<>()); } ans.get(level).add(root.val); helper(root.left, level + 1); helper(root.right, level + 1); } }