Given a binary tree root, a node X in the tree is named good if in the path from root to X there are no nodes with a value greater than X.Return the number of good nodes in the binary tree.
Input: root = [3,1,4,3,null,1,5]Output: 4Explanation: Nodes in blue are good.Root Node (3) is always a good node.Node 4 -> (3,4) is the maximum value in the path starting from the root.Node 5 -> (3,4,5) is the maximum value in the path.Node 3 -> (3,1,3) is the maximum value in the path.
Input: root = [3,3,null,4,2]Output: 3Explanation: Node 2 -> (3,3,2) is not good, because "3" is higher than it.
Input: root = [1]Output: 1Explanation: Root is considered as good.
from leetcode_py import TreeNodeclass Solution: # Time: O(n) # Space: O(h) - recursion stack, h = tree height def good_nodes(self, root: TreeNode[int] | None) -> int: if root is None: return 0 def dfs(node: TreeNode[int], max_so_far: int) -> int: good = 1 if node.val >= max_so_far else 0 next_max = max(max_so_far, node.val) total = good if node.left is not None: total += dfs(node.left, next_max) if node.right is not None: total += dfs(node.right, next_max) return total return dfs(root, root.val)