LC 1448 [M] Count Good Nodes in Binary Tree - ALawliet/algorithms GitHub Wiki

# 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:
        self.count = 0
        
        def preorder(X, max_so_far):
            if not X: return 0
            
            count_X_good = int(X.val >= max_so_far)
            max_so_far = max(max_so_far, X.val)
            
            count_L_good = preorder(X.left, max_so_far)
            count_R_good = preorder(X.right, max_so_far)
            
            return count_X_good + count_L_good + count_R_good
        
        return preorder(root, root.val)