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
| from sortedcontainers import SortedList
class Solution:
def countGreatEnoughNodes(self, root: Optional[TreeNode], k: int) -> int:
sorted_values = SortedList()
self.great_nodes_count = 0
def dfs(node):
if not node:
return SortedList()
left_subtree = dfs(node.left)
right_subtree = dfs(node.right)
if len(left_subtree) < len(right_subtree):
left_subtree, right_subtree = right_subtree, left_subtree
for value in right_subtree:
left_subtree.add(value)
index = left_subtree.bisect_left(node.val)
left_subtree.add(node.val)
if index >= k and len(left_subtree) >= k:
self.great_nodes_count += 1
return left_subtree
dfs(root)
return self.great_nodes_count
|