[
dfs
bfs
recursion
]
Leetcode 1530. Number of Good Leaf Nodes Pairs
Problem statement
https://leetcode.com/problems/number-of-good-leaf-nodes-pairs/
Solution
One idea is to create tree in the way of defaultdict and then run bfs from each node.
Another way is to use dfs(node)
, where the answer is distances between node
and all leafs which can be reached from this node.
Complexity
Time is O(n^2)
, because we have equation T(n) = 2*T(n//2) + O(n^2)
. Space can be O(n^2)
as well.
Code
class Solution:
def countPairs(self, root, dist):
def dfs(node):
if not node: return []
if not node.left and not node.right: return [1]
left = dfs(node.left)
right = dfs(node.right)
self.count += sum(l + r <= dist for l in left for r in right)
return [n + 1 for n in left + right if n + 1 < dist]
self.count = 0
dfs(root)
return self.count
Remark
There is also O(n log n)
time complexity: maintain the valid distance in sorted order and use two pointers technique (and probaly larger to smaller tecnique?)