1530. Number of Good Leaf Nodes Pairs
Medium
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].
Example 4:
Input: root = [100], distance = 1 Output: 0
Example 5:
Input: root = [1,1,1], distance = 2 Output: 1
Constraints:
- The number of nodes in the
tree
is in the range[1, 2^10].
- Each node's value is between
[1, 100]
. 1 <= distance <= 10
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | /** * 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 { int pairs = 0; public int countPairs(TreeNode root, int distance) { dfs(root, distance); return pairs; } int[] dfs(TreeNode node, int distance){ int[] res = new int[distance+1]; if(node==null) return res; if(node.left==null && node.right==null){ res[1]++; return res; } int[] left = dfs(node.left, distance); int[] right = dfs(node.right, distance); for(int i=1; i<distance; ++i){ if(left[i]==0) continue; for(int j=1; j+i<=distance; ++j){ if(right[j]==0) continue; pairs += left[i]*right[j]; } } for(int i=0; i<distance; ++i){ res[i+1] += left[i]; res[i+1] += right[i]; } return res; } } |
No comments:
Post a Comment