LeetCode 1530. Number of Good Leaf Nodes Pairs

原题链接在这里:https://leetcode.com/problems/number-of-good-leaf-nodes-pairs/description/

题目:

You are given the root of a binary tree and an integer distance. A pair of two different leaf nodes of a binary tree is said to be good if the length of the shortest path between them is less than or equal to distance.

Return the number of good leaf node pairs in the tree.

Example 1:

Input: root = [1,2,3,null,4], distance = 3
Output: 1
Explanation: The leaf nodes of the tree are 3 and 4 and the length of the shortest path between them is 3. This is the only good pair.

Example 2:

Input: root = [1,2,3,4,5,6,7], distance = 3
Output: 2
Explanation: The good pairs are [4,5] and [6,7] with shortest path = 2. The pair [4,6] is not good because the length of ther shortest path between them is 4.

Example 3:

Input: root = [7,1,4,6,null,5,3,null,null,null,null,null,2], distance = 3
Output: 1
Explanation: The only good pair is [2,5].

Constraints:

  • The number of nodes in the tree is in the range [1, 210].
  • 1 <= Node.val <= 100
  • 1 <= distance <= 10

题解:

The good pair is distance between leaves is <= threshold.

For the current root, we need to know for left and right subtree, the leaves distance and its corresponding count. distance : count.

Iterate both left and right, if distance sum <= threshold. Accumlate the product to the result.

Since returned array is used by one level up, thus when root is leaf, set resArr[1] as one, but not resArr[0] as one.

Time Complexity: O(n * distance ^ 2).

Space: O(n*distance). For the balanced tree, the leaf level has n / 2 nodes. Each node has distance array.

AC Java:

 1 /**
 2  * Definition for a binary tree node.
 3  * public class TreeNode {
 4  *     int val;
 5  *     TreeNode left;
 6  *     TreeNode right;
 7  *     TreeNode() {}
 8  *     TreeNode(int val) { this.val = val; }
 9  *     TreeNode(int val, TreeNode left, TreeNode right) {
10  *         this.val = val;
11  *         this.left = left;
12  *         this.right = right;
13  *     }
14  * }
15  */
16 class Solution {
17     int result = 0;
18     public int countPairs(TreeNode root, int distance) {
19         if(distance <= 1){
20             return result;
21         }
22 
23         dfs(root, distance);
24         return result;
25     }
26 
27     private int[] dfs(TreeNode root, int distance){
28         int[] resArr = new int[distance];
29         if(root == null){
30             return resArr;
31         }
32 
33         if(root.left == null && root.right == null){
34             resArr[1] = 1;
35             return resArr;
36         }
37 
38         int[] left = dfs(root.left, distance);
39         int[] right = dfs(root.right, distance);
40         for(int l = 1; l < left.length; l++){
41             for(int r = 1; r < right.length; r++){
42                 if(l + r <= distance){
43                     result += left[l] * right[r];
44                 }
45             }
46         }
47 
48         for(int i = 1; i < resArr.length; i++){
49             resArr[i] = left[i - 1] + right[i - 1];
50         }
51 
52         return resArr;
53     }
54 }

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows节点加入K8S集群(K8S搭建Linux和Window混合集群)

说明:K8S多数情况用于linux系统的集群,目前很少人实践linux 和 windows 的混合集群。linux 和 windows 的K8S混合集群,是以linux 为Master节点,Windows 为 Node节点的。本示例linux 采用centos7.6,windows 采用 windows server 2019(均为虚拟机)。 一、前提准备1.熟悉li…

[笔记]快速傅里叶变换(FFT)

模板题:P3803 【模板】多项式乘法(FFT) 快速傅里叶变换(Fast Fourier Transform,FFT)在算法竞赛中主要用于求卷积,或者说多项式乘法。如果我们枚举两数的各系数相乘,时间复杂度是\(O(n^2)\),而FFT可以将这一过程优化到\(O(n\log n)\)。 流程 整个FFT算法分\(3\)个过程:…

Improving News Recommendation via Bottlenecked Multi-task Pre-training论文阅读笔记

Improving News Recommendation via Bottlenecked Multi-task Pre-training论文阅读笔记 Abstract 现存的问题: ​ 现有的 PLM 大多是在大规模通用语料库上预先训练的,并没有专门用于捕捉新闻文章中的丰富信息。因此,它们生成的新闻嵌入信息可能不足以表示新闻内容或描述新闻…

uniapp 微信小程序阻止返回上一页

第一种:wx.enableAlertBeforeUnload在开发者工具中预览效果 微信小程序官网:点我onShow(() => {wx.enableAlertBeforeUnload({message: "返回上页时弹出对话框",success: function (res) {console.log("方法注册成功:", res);},fail: function (errM…

基于NXP i.MX 6ULL核心板的物联网模块开发案例(1)

目录 前 言 1 SDIO WIFI模块测试 1.1 STA模式测试 1.2 AP模式测试 1.3 SDIO WIFI驱动编译 前言 本文主要介绍基于创龙科技TLIMX6U-EVM评估板的物联网模块开发案例,适用开发环境: Windows开发环境:Windows 7 64bit、Windows 10 64bit 虚拟机:VMware15.1.0 Linux开发环境:Ub…

T113-i最新发布Tina5.0系统!支持3大新特性!

创龙科技全志T113-i双核Cortex-A7@1.2GHz全国产工业核心板(含税79元)一经面世,就以超高性价比受到全行业关注。而创龙科技再次为T113-i处理器平台进行软件系统完善,正式适配Tina5.0系统,大大满足了全志T113-i用户的不同场景需求,让工业应用更简单。 Tina5.0系统说明 Tina…

一文教你在华为云上部署Discuz论坛网站

在KooLabs云实验平台搭建Discuz论坛网站,Discuz基础架构采用流行的 Web 编程组合PHP+MySQL实现。本文分享自华为云社区《华为云之在Linux系统下部署Discuz 论坛网站【玩转华为云】》,作者:江湖有缘。 一、本次实践介绍 1.1 实践环境简介 1.本次实践环境使用华为KooLabs云实验…

6. 打印日志信息

6. 打印日志信息 在CMake中可以用用户显示一条消息,该命令的名字为message: message([STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR] "message to display" ...)(无):重要信息 STATUS:非重要信息 WARNING:CMake 警告,会继续执行 AUTHOR_WARNING:CMa…

5. 库相关

5. 库相关 有些时候我们编写的源代码并不需要将他们编译生成可执行程序,而是生成一些静态库或动态库提供给第三方使用,下面来讲解在cmake中生成这两类库文件的方法。 5.1 什么是库 本部分介绍创建与使用静态库、动态库,知道静态库与动态库的区别,知道使用的时候如何选择。这…

Performance Monitoring检测camstar性能

InsiteXMLServer \ Provate Bytes使用内存的字节 InsiteXMLServer \ Working Set Peak 高峰 Process \ %Processor Time CPU占用时间 InsiteXMLServer \ Elapsed Time占用时间 Camstar.Security.LMServer \ Elapsed Time CamstarNotificatuionServer\Elapsed Time CIMSagent \ …

【Bug】拓展方法必须在非泛型静态类中定义

原文链接:https://blog.csdn.net/weixin_44231544/article/details/121752347 原: 修改: 拓展方法1.定义: (1)扩展方法能使你能够向现有类型添加“添加”方法,而无需创建新的派生类型,重新编译或以其他方式修改原始类型。 (2)扩展方法是一种特殊的静态方法,但可以像…