publicclassSolution2{ public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> ans = new ArrayList<>(); if (root == null) { return ans; }
Queue<TreeNode> deq = new LinkedList<>(); deq.offer(root); while (!deq.isEmpty()) { int cnt = deq.size(); List<Integer> level = new ArrayList<>(); for (int i = 0; i < cnt; i++) { TreeNode node = deq.poll(); level.add(Objects.requireNonNull(node).val); if (node.left != null) { deq.offer(node.left); } if (node.right != null) { deq.offer(node.right); } } ans.add(0, level); } return ans; } }
复杂度分析
时间复杂度:O(n),其中 n 是二叉树中的节点个数。每个节点访问一次,结果列表使用链表的结构时,在结果列表头部添加一层节点值的列表的时间复杂度是 O(1),因此总时间复杂度是 O(n)。
空间复杂度:O(n),其中 n 是二叉树中的节点个数。空间复杂度取决于队列开销,队列中的节点个数不会超过 n。