美文网首页
【算法题】2583. 二叉树中的第 K 大层和

【算法题】2583. 二叉树中的第 K 大层和

作者: 程序员小2 | 来源:发表于2023-04-15 08:41 被阅读0次

    题目:

    给你一棵二叉树的根节点 root 和一个正整数 k 。

    树中的 层和 是指 同一层 上节点值的总和。

    返回树中第 k 大的层和(不一定不同)。如果树少于 k 层,则返回 -1 。

    注意,如果两个节点与根节点的距离相同,则认为它们在同一层。

    示例1:


    image.png

    输入:root = [5,8,9,2,1,3,7,4,6], k = 2
    输出:13
    解释:树中每一层的层和分别是:

    • Level 1: 5
    • Level 2: 8 + 9 = 17
    • Level 3: 2 + 1 + 3 + 7 = 13
    • Level 4: 4 + 6 = 10
      第 2 大的层和等于 13 。

    示例 2:


    image.png

    输入:root = [1,2,null,3], k = 1
    输出:3
    解释:最大的层和是 3 。

    提示:

    树中的节点数为 n
    2 <= n <= 10^5
    1 <= Node.val <= 10^6
    1 <= k <= n

    java代码 :

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode() {}
     *     TreeNode(int val) { this.val = val; }
     *     TreeNode(int val, TreeNode left, TreeNode right) {
     *         this.val = val;
     *         this.left = left;
     *         this.right = right;
     *     }
     * }
     */
     class Solution {
        public long kthLargestLevelSum(TreeNode root, int k) {
            if(root == null) return -1;//根节点为空,直接返回-1。
            ArrayList<Long> arr = new ArrayList<>();//暂存层和,也即每层中节点value的累加值。
            Deque<TreeNode> que = new ArrayDeque<>();//队列。
            que.addFirst(root);//先加入根节点。
            while(que.isEmpty() == false) {
                int num = que.size();//当前层中的节点数。
                long sum = 0;//累加值。
                for(int i = 0; i  <num; i++) {//每个节点分别出队累加并在队列中加入新节点。
                    TreeNode temp = que.pollLast();
                    sum += temp.val;
                    if(temp.left != null) que.addFirst(temp.left);//注意非空时才能累加。
                    if(temp.right != null) que.addFirst(temp.right);
                }
                arr.add(sum);//当前层和暂存。
            }
            arr.sort(Comparator.naturalOrder());//排序。
            if(arr.size() >= k) return arr.get(arr.size() - k);//若层数比k大,输出第k大。
            else return -1;
        }
    }
    
    

    相关文章

      网友评论

          本文标题:【算法题】2583. 二叉树中的第 K 大层和

          本文链接:https://www.haomeiwen.com/subject/mvqxjdtx.html