美文网首页
【算法题】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;
    }
}

相关文章

  • 堆排序

    完全二叉树 完全二叉树:树深为k层,则除k层外,k-1层的节点全满,且第k层的节点向左靠拢 称为完全二叉树 堆 一...

  • LeetCode 力扣 103. 二叉树的锯齿形层次遍历

    题目描述(中等难度) 和 102 题 类似,二叉树的层次遍历。只不过这题要求,第 1 层从左到右,第 2 层从右到...

  • 数据结构

    二叉树的性质: 二叉树中,第 i 层最多有 2i-1 个结点 如果二叉树的深度为 K,那么此二叉树最多有 2K-1...

  • 树 -(完全二叉树)

    完全二叉树是什么? 若设二叉树的深度为k,除第 k 层外,其它各层 (1~k-1) 的结点数都达到最大个数,第k ...

  • 二叉树

    二叉树性质 1)在二叉树的第i层上最多有2i-1 个节点 。(i>=1)2)二叉树中如果深度为k,那么最多有2k-...

  • 数据结构之逻辑结构_树

    满二叉树与完全二叉树 满二叉树:深度为k且含有(2的k方)-1个结点的二叉树。 完成二叉树:在第k层深度被填满之前...

  • 二叉树的层平均值(Java)——算法刷题打卡

    二叉树的层平均值 对于此题而言,我们使用广度优先算法来遍历二叉树。 1、深度优先算法是根据二叉树的路径进行遍历2、...

  • 【算法题】递归求二叉树深度

    二叉树的深度算法,是二叉树中比较基础的算法了。对应 LeetCode 第104题。 然后你会发现 LeetCode...

  • 二叉树

    性质 1)在二叉树的第i层上最多有2i-1个节点 。(i>=1) 2)二叉树中如果深度为k,那么最多有2k-1个节...

  • ALI 算法

    二叉树遍历算法: 按层遍历, 中序前序后序:

网友评论

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

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