while (!queue.isEmpty()) { longlevelSum=0; for (inti= queue.size(); i > 0; i--) { TreeNodenode= queue.poll(); levelSum += node.val;
if (node.left != null) { queue.offer(node.left); } if (node.right != null) { queue.offer(node.right); } }
if (minHeap.size() < k || levelSum > minHeap.peek()) { // 注意比较堆顶大小仅在堆内元素个数大于等于 k 个时进行 minHeap.offer(levelSum); if (minHeap.size() > k) { // 注意此 if 不能去掉,因为堆内元素不足 k 个时只能放入而不能移除 minHeap.poll(); } } }
return minHeap.size() < k ? -1 : minHeap.peek(); // 注意题目要求:如果树少于 k 层,则返回 -1 } }