当前位置: 首页 > ops >正文

Leetcode 2792. 计算足够大的节点数

1.题目基本信息

1.1.题目描述

给定一棵二叉树的根节点 root 和一个整数 k 。如果一个节点满足以下条件,则称其为 足够大 :

它的子树中 至少 有 k 个节点。

  • 它的值 大于 其子树中 至少 k 个节点的值。
  • 返回足够大的节点数。

如果 u == v 或者 v 是 u 的祖先,则节点 u 在节点 v 的 子树 中。

1.2.题目地址

https://leetcode.cn/problems/count-nodes-that-are-great-enough/description/

2.解题方法

2.1.解题思路

递归+归并+二分查找

时间复杂度:O(Klog(N))

2.2.解题步骤

第一步,构建维护变量。result维护足够大的节点数

第二步,构建递归函数。递归任务:返回node子树中所有节点值的升序数组的前k个元素子数组;并在递归的过程中进行计数,更新self.result

2.1.递归出口

2.2.对node的左右子节点的递归结果数组进行归并

2.3.将node.val插入arr数组中

2.4.更新结果变量;并返回递归值

第三步,调用递归,返回结果

3.解题代码

Python代码

# 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
from bisect import bisect_leftclass Solution:def countGreatEnoughNodes(self, root: Optional[TreeNode], k: int) -> int:# 思路:递归+归并+二分查找。时间复杂度:O(Klog(N))# 第一步,构建维护变量。result维护足够大的节点数self.result = 0# 第二步,构建递归函数。递归任务:返回node子树中所有节点值的升序数组的前k个元素子数组;并在递归的过程中进行计数,更新self.resultdef dfs(node:TreeNode) -> list[int]:# 2.1.递归出口if node is None:return []# 2.2.对node的左右子节点的递归结果数组进行归并leftList, rightList = dfs(node.left), dfs(node.right)arr = [0] * (len(leftList) + len(rightList))i, j, k1 = 0, 0, 0while i < len(leftList) and j < len(rightList):if leftList[i] < rightList[j]:arr[k1] = leftList[i]i += 1; k1 += 1else:arr[k1] = rightList[j]j += 1; k1 += 1while i < len(leftList):arr[k1] = leftList[i]i += 1; k1 += 1while j < len(rightList):arr[k1] = rightList[j]j += 1; k1 += 1# 2.3.将node.val插入arr数组中index = bisect_left(arr, node.val)arr.insert(index, node.val)# 2.4.更新结果变量;并返回递归值if len(arr) >= k and arr[k - 1] < node.val:self.result += 1return arr[:k]# 第三步,调用递归,返回结果dfs(root)return self.result

4.执行结果

http://www.xdnf.cn/news/8281.html

相关文章:

  • 储能电站:风光储一体化能源中心数字孪生
  • Vmware ubuntu22.04 虚拟机 连接Windows主机虚拟串口
  • 【Unity3D】Text组件中换行文本显示异常
  • 频湖脉决全文
  • spring.factories详解
  • ROS合集(七)SVIn2声呐模块分析
  • JVM 双亲委派模型
  • C++单例模式详解
  • 前端(小程序)学习笔记(CLASS 2):WXML模板语法与WXSS模板样式
  • 光电耦合器与数字容隔离器的“光速对话”
  • Java设计模式:探索编程背后的哲学
  • python定时删除指定索引
  • 谷歌浏览器调试python pygui程序
  • 国产化Word处理控件Spire.Doc教程:使用 Python 创建 Word 文档的详细指南
  • 企业级云原生爬虫架构与智能优化
  • LET 2025盛大开幕!数智工厂×智慧物流×机器人,一展get创新科技
  • VSCode 插件 GitLens 破解方法
  • 线程池介绍,分类,实现(工作原理,核心组成,拒绝策略),固态线程池的实现+详细解释(支持超时取消机制和不同的拒绝策略)
  • [性能优化] 数据库连接池(Connection Pooling)原理及其在Java/Python应用中的配置
  • 大模型高效微调方法综述:P-Tuning软提示与lora低秩微调附案例代码详解
  • 在 ABP VNext 中集成 OpenCvSharp:构建高可用图像灰度、压缩与格式转换服务
  • 自制操作系统day10叠加处理
  • 数据库系统概论(九)SQL连接查询语言超详细讲解(附带例题,表格详细讲解对比带你一步步掌握)
  • MCP 服务与 Agent 协同架构的理论基石:从分布式智能到生态化协作
  • OSI 深度安全防御体系架构深度剖析
  • Java转Go日记(五十六):gin 渲染
  • 可视化大屏实现全屏或非全屏
  • iOS使用Metal对采集视频进行渲染
  • 【YOLO】Docker搭建镜像+运行容器
  • 如何制作令人印象深刻的UI设计?