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

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.执行结果

相关文章:

  • mysql语句执行流程
  • Femap许可证升级说明
  • LTSPICE仿真电路:(二十九)T型反馈比例器
  • VirtualBox 4.3.10 经典版安装教程 - Windows 7/10 下载与设置指南
  • ASUS华硕ROG枪神9P笔记本G815LP(G615LW,G635LR,G835LX)原装出厂Win11系统,开箱状态oem系统
  • CAU人工智能class4 批次归一化
  • leetcode3434. 子数组操作后的最大频率-medium
  • JavaSE核心知识点03高级特性03-01(集合框架)
  • docker镜像操作
  • 什么是Express
  • LeRobot 框架的开发指南 (上)
  • 垒球百科全书·棒球1号位
  • 精度不够?光纤激光尺0.2ppm误差解锁微米级制造
  • Alpha shapes算法边缘点进行排序(C++)
  • 日志分析-IIS日志分析
  • PTA刷题笔记2
  • 进考场!软考考试现场答题的注意事项
  • 列表集合字典推导式
  • 互联网大厂Java求职面试:云原生架构与AI应用集成解决方案
  • SkyWalking高频采集泄漏线程导致CPU满载排查思路
  • 保定哪个公司做网站好/网络软文案例
  • 专题网站建设意义何在/seo怎么推广
  • 合肥网站建设公司/8个公开大数据网站
  • 建设工程消防监督管理规定网站/微商怎样让客源主动加你
  • 做英文网站要多少钱/网站seo视频狼雨seo教程
  • 360免费wifi连不上/网站性能优化方法