# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution: def goodNodes(self, root: TreeNode) -> int: if not root: return 0 def dfs(node, max_val): if not node: return 0 is_good = False if node.val >= max_val: is_good = True max_val = node.val return dfs(node.left, max_val) + dfs(node.right, max_val) + int(is_good) return dfs(root, -sys.maxsize) Complexity Time: O(n) Space: O(log(n))