LeetCode 3319. 第 K 大的完美二叉子树的大小

news2024/10/23 8:51:51

LeetCode 3319. 第 K 大的完美二叉子树的大小

给你一棵 二叉树 的根节点 root 和一个整数k。
返回第 k 大的 完美二叉子树的大小,如果不存在则返回 -1。
完美二叉树 是指所有叶子节点都在同一层级的树,且每个父节点恰有两个子节点。
子树 是指树中的某一个节点及其所有后代形成的树。
示例 1:
输入: root = [5,3,6,5,2,5,7,1,8,null,null,6,8], k = 2
输出: 3
解释:
在这里插入图片描述
完美二叉子树的根节点在图中以黑色突出显示。它们的大小按降序排列为 [3, 3, 1, 1, 1, 1, 1, 1]。
第 2 大的完美二叉子树的大小是 3。
示例 2:
输入: root = [1,2,3,4,5,6,7], k = 1
输出: 7
解释:
在这里插入图片描述
完美二叉子树的大小按降序排列为 [7, 3, 3, 1, 1, 1, 1]。最大的完美二叉子树的大小是 7。
示例 3:
输入: root = [1,2,3,null,4], k = 3
输出: -1
解释:
在这里插入图片描述
完美二叉子树的大小按降序排列为 [1, 1]。完美二叉子树的数量少于 3。
提示:
树中的节点数目在 [1, 2000] 范围内。
1 <= Node.val <= 2000
1 <= k <= 1024

DFS

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:

    def kthLargestPerfectSubtree(self, root: Optional[TreeNode], k: int) -> int:
        details = [0] * 2001

        def build_details(idx, node):
            if not node:
                # judge, count, height
                return True, 0, 0
            left_judge = build_details(idx * 2, node.left)
            right_judge = build_details(idx * 2 + 1, node.right)
            judge, count = False, 0
            height = 1 + max(left_judge[2], right_judge[2])
            if left_judge[0] and right_judge[0] and left_judge[2] == right_judge[2]:
                count = 1 + left_judge[1] + right_judge[1]
                judge = True
            details[idx] = count
            return judge, count, height

        build_details(1, root)
        details.sort(reverse=True)
        _res = details[k - 1]
        return _res if _res else -1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2213123.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络:数据链路层 —— 以太网(Ethernet)

文章目录 局域网局域网的主要特征 以太网以太网的发展100BASE-T 以太网物理层标准 吉比特以太网载波延伸物理层标准 10吉比特以太网汇聚层交换机物理层标准 40/100吉比特以太网传输媒体 局域网 局域网&#xff08;Local Area Network, LAN&#xff09;是一种计算机网络&#x…

本地装了个pytorch cuda

安装命令选择 pip install torch1.13.1cu116 torchvision0.14.1cu116 torchaudio0.13.1 --extra-index-url https://download.pytorch.org/whl/cu116 torch版本查看 python import torch print(torch.__version__) 查看pytorch能否使用cuda import torch# 检查CUDA是否可用…

如何用AWG实现脉冲激光输出

脉冲激光二极管提供强功率短脉冲的能力&#xff0c;使其成为目标指定和测距等军事应用的理想选择。事实上&#xff0c;开发这些二极管的许多历史动机都有军事渊源。然而&#xff0c;当今的技术进步和成本降低的大背景之下&#xff0c;在测试测量和医学领域新的应用得以开辟。 …

113.WEB渗透测试-信息收集-ARL(4)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;112.WEB渗透测试-信息收集-ARL&#xff08;3&#xff09;-CSDN博客 等待搭建成功 创建成…

Vue深入了解

Vue深入了解 MVVMv-model (双向数据绑定原理)异步更新keep-alive原理$nextTick原理computed 和 watch 的区别css-scoped虚拟DOMVuex && PiniaVue-router原理proxy 与 Object.defineProperty组件通信方式 MVVM <!DOCTYPE html> <html lang"en">&…

声波驱鸟 全向强声广播的应用

HT-360A多层叠形360向广播是恒星科通自主研发的一款应急广播专用设备&#xff0c;该设备内部采用1-4组换能器垂直阵列设置&#xff0c;水平采用指数函数碟形堆叠技术&#xff0c;在垂直方向上多层碟扬声器可实现360度环形垂直阵列&#xff0c;实现多层声场叠加。 系统可采用4G…

Linux驱动中的并发与竞争处理

Linux是一个多任务操作系统&#xff0c;肯定会存在多个任务共同操作同一段内存或者设备的情况&#xff0c;多个任务甚至中断都能访问的资源叫做共享资源&#xff0c;就和共享单车一样。在驱动开发中要注意对共享资源的保护&#xff0c;也就是要处理对共享资源的并发访问。比如共…

智慧校园打架斗殴检测预警系统 异常奔跑检测系统 Python 和 OpenCV 实现简单

在当今数字化时代&#xff0c;智慧校园建设已成为教育领域的重要发展方向。校园安全作为学校管理的重中之重&#xff0c;如何借助先进的技术手段实现高效、精准的安全监控&#xff0c;成为了教育工作者和技术专家共同关注的焦点。其中&#xff0c;智慧校园打架斗殴检测预警系统…

案例|当大型车企水灵灵地用上美创数据透明加解密“四折叠“...

你知道么&#xff1f; 2024年1-8月全球累计乘用车销量4494.5万辆 中国销量约为1361.37万辆 你知道么&#xff1f; 一辆智能网联汽车每天至少收集10TB的数据 数量庞大 涉及车身状态、出行轨迹、语音、视频... 这还不包括汽车制造产业链、内部管理... 你知道么&#xff1f;…

JDK安装环境配置保姆间教程

文章介绍了Java编程语言的基本知识&#xff0c;包括其创始人和发布年份&#xff0c;然后详细阐述了如何下载和安装JDK&#xff0c;以及如何配置JAVA_HOME和Path环境变量&#xff0c;以确保Java开发环境的正确设置。最后&#xff0c;作者提到在JDK1.5以后的版本中&#xff0c;无…

linux jdk环境变量变量新配置方式

1.jdk17--> jdk8环境变量配置,source /etc/profile了也不生效 which java #假设上命令运行结果为/usr/bin/java rm -rf /usr/bin/javaln -s $JAVA_HOME/bin/java /usr/bin/java source /etc/profile# 断开本次远程连接&#xff0c;重连检查java -version 2.jdk环境变量变…

手动、半自动、全自动探针台的区别有哪些

手动探针台、半自动探针台和全自动探针台是三种不同类型的探针台&#xff0c;它们在使用类型、功能、操作方式和价格等方面都有所不同。 手动探针台是一种手动控制的探针台&#xff0c;通常用于没有很多待测器件需要测量或数据需要收集的情况下。该类探针台的优点是灵活、可变…

EXCEL 随机函数 RAND 生成数字填充

大家好&#xff0c;这里是效率办公指南&#xff01; &#x1f522; 在数据分析和模拟中&#xff0c;经常需要生成随机数字。Excel 提供了多个函数来满足这一需求&#xff0c;包括 RAND、RANDARRAY 和 RANDBETWEEN。今天&#xff0c;我们将介绍这些函数的使用方法&#xff0c;并…

FFMPEG音视频API-----------------复用(编码)篇

1.获取AVFormatContext音视频格式上下文 根据后面的几个参数分配AVFormatContext&#xff08;格式上下文&#xff09; 参数1&#xff1a;AVFormatContext **ctx分配返回的地址 参数2&#xff1a;AVOutputFormat *oformat如果提供该参数则通过该参数分配结构体&#xff0c;如…

利用Microsoft Entra Application Proxy在无公网IP条件下安全访问内网计算机

在现代混合办公环境中&#xff0c;如何让员工能够从任何地方安全访问公司内部资源成为了企业的重要挑战。传统的VPN解决方案虽然可以满足需求&#xff0c;但有时配置复杂&#xff0c;并可能涉及公网IP的问题。为了解决这个问题&#xff0c;Microsoft Entra&#xff08;原Azure …

WordPress 禁用上传媒体图片自动生成缩略图及多尺寸图片教程

一、在 设置-媒体-媒体设置 中几个尺寸大小的设置不勾选或设置为 0&#xff0c;如下图&#xff1a; 二、找到主题文件 function.php 文件&#xff0c;打开后&#xff0c;在 <?php 后面添加如下代码&#xff1a; function.php 文件路径一般为&#xff1a;WordPress网站根目录…

使用Matlab实现光线追迹详解(含代码)

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

ExtraTree|GBDT|XGBoost模型原理

目录 1. 总述2. ExtraTree3. GBDT4. XGBoost 1. 总述 ExtraTree、GBDT 和 XGBoost 都是基于决策树的算法。ExtraTree属于Bagging&#xff08;装袋法&#xff09;方法&#xff0c;GBDT和XGBoost则属于Boosting&#xff08;提升树&#xff09;方法&#xff0c;通过逐步优化残差&…

U盘剪切文件丢失:原因、恢复方案与预防措施

一、U盘剪切文件的定义与特性 U盘剪切文件&#xff0c;是指用户在将文件从U盘移动到其他存储设备&#xff08;如电脑硬盘、其他U盘等&#xff09;时&#xff0c;通过操作系统的剪切功能&#xff0c;将文件从U盘中原位置删除&#xff0c;并暂存于系统剪贴板中&#xff0c;等待用…