Leetcode 1157 Solution

This article provides solution to leetcode question 1157 (insufficient-nodes-in-root-to-leaf-paths)

https://leetcode.com/problems/insufficient-nodes-in-root-to-leaf-paths

Solution

# 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 sufficientSubset(self, root: Optional[TreeNode], limit: int) -> Optional[TreeNode]:
        dummy_root = TreeNode()
        dummy_root.left = root

        self.dfs(dummy_root, 0, limit)

        return dummy_root.left

    def dfs(self, root, pathsum, limit):
        left_max = 0
        left_none = root.left is None
        if root.left is not None:
            left_max = self.dfs(root.left, pathsum + root.left.val, limit)
            if pathsum + left_max < limit:
                root.left = None

        right_max = 0
        right_none = root.right is None
        if root.right is not None:
            right_max = self.dfs(root.right, pathsum + root.right.val, limit)
            if pathsum + right_max < limit:
                root.right = None

        if left_none:
            return root.val + right_max
        elif right_none:
            return root.val + left_max
        else:
            return root.val + max(left_max, right_max)