814. Binary Tree Pruning

QUESTION:

We are given the head node root of a binary tree, where additionally every node’s value is either a 0 or a 1.

Return the same tree where every subtree (of the given tree) not containing a 1 has been removed.

(Recall that the subtree of a node X is X, plus every node that is a descendant of X.)

Example 1: Input: [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: [1,0,1,0,0,0,1] Output: [1,null,1,null,1]

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

Note:

The binary tree will have at most 100 nodes. The value of each node will only be 0 or 1.

EXPLANATION:

1.如果节点为null，那么就是true
2.如果左节点为true，那么就可以删除
3.如果右节点为true，那么可以删除
4.如果本节点为0并且左右节点都为true，那么返回true，给上一个节点删除
5.否则返回false

SOLUTION:

``````class Solution {
public TreeNode pruneTree(TreeNode root) {
if(root == null) return null;
pruneTreeHelper(root);
return root;
}

public static boolean pruneTreeHelper(TreeNode node){
if(node == null) return true;
boolean left = pruneTreeHelper(node.left);
boolean right = pruneTreeHelper(node.right);
if(left) node.left = null;
if(right) node.right = null;
if(node.val==0 && left && right) return true;
return false;
}
}
``````
>