[
tree
dfs
bfs
]
Leetcode 1080. Insufficient Nodes in Root to Leaf Paths
Problem statement
1080. Insufficient Nodes in Root to Leaf Paths
Solution
In this problem we need to use postorder dfs: dfs(node, sm) means that we reached node and sm is sum of values from root to node, not including node.
- If we reached
Nonenode, return False, we do not need to delete it. - If we reached leaf, check if
sm + node.val >= limit, it will say if we need to delete it. - Traverse left and right subtrees.
- If answer for the left subtree is False, remove this subtee, the same for the right subtree.
- Finally, If any of two subtees are not deleted, keep
node, in the opposite case delete it as well.
Complexity
It is O(n) for time and O(h) for space.
Code
class Solution:
def sufficientSubset(self, root, limit):
def dfs(node, sm):
if not node: return False
if not node.left and not node.right:
return sm + node.val >= limit
left = dfs(node.left, sm + node.val)
right = dfs(node.right, sm + node.val)
if not left:
node.left = None
if not right:
node.right = None
return left or right
result = dfs(root, 0)
return root if result else None