3
we can try to solve this problem using depth first traversal6
def dfs(self, root, sum_so_far, limit):10
x, left = self.dfs(root.left, sum_so_far + root.val, limit)11
y, right = self.dfs(root.right, sum_so_far + root.val, limit)12
# print('for node= {}, sum_so_far= {}, left= {}, right= {}'.format(root.val, sum_so_far, left, right))13
if root.left is None and root.right is None:14
# it is leaf, left and right should be 015
if sum_so_far + root.val < limit:16
# node is insufficient21
elif root.left is not None and root.right is None:23
if sum_so_far + root.val + left < limit:24
# node is insufficient25
return None, root.val + left27
return root, root.val + left29
elif root.left is None and root.right is not None:31
if sum_so_far + root.val + right < limit:32
return None, root.val + right34
return root, root.val + right36
elif root.left is not None and root.right is not None:40
sum_so_far + root.val + left < limit41
and sum_so_far + root.val + right < limit43
return None, max(root.val + left, root.val + right)45
sum_so_far + root.val + left < limit46
and sum_so_far + root.val + right > limit48
return root, root.val + right50
sum_so_far + root.val + left > limit51
and sum_so_far + root.val + right < limit53
return root, root.val + left55
return root, max(root.val + left, root.val + right)58
self, root: Optional[TreeNode], limit: int59
) -> Optional[TreeNode]:60
root, _ = self.dfs(root, 0, limit)