Description
https://leetcode.com/problems/matrix-block-sum/
Given the root of a binary tree, return the same tree where every subtree (of the given tree) not containing a 1 has been removed.
A subtree of a node node is node plus every node that is a descendant of node.
Example 1:

Input: root = [1,null,0,0,1] Output: [1,null,0,null,1] Explanation: Only the red nodes satisfy the property "every subtree not containing a 1". The diagram on the right represents the answer.
Example 2:

Input: root = [1,0,1,0,0,0,1] Output: [1,null,1,null,1]
Example 3:

Input: root = [1,1,0,1,1,0,1,0] Output: [1,1,0,1,1,null,1]
Constraints:
- The number of nodes in the tree is in the range
[1, 200]. Node.valis either0or1.
Explanation
Check the subtree recursively, if the node value is 1, or the node contains subrees with value 1, keep the subtree, otherwise, make the node null.
Python 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 pruneTree(self, root: TreeNode) -> TreeNode:
if not self.helper(root):
return None
return root
def helper(self, root):
if not root:
return False
left = self.helper(root.left)
right = self.helper(root.right)
if not left:
root.left = None
if not right:
root.right = None
return root.val == 1 or left or right
- Time Complexity: O(N).
- Space Complexity: O(N).