题目:
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.
思路:
该题要求的是截取掉全部含零的子树。我的思路是采用递归的方法查找满足条件的子树。当树结点的值为1的时候返回false。检查树中的点的左右子树。一旦返回的是true就将相应的左右子树设置为null。
代码:
public TreeNode pruneTree(TreeNode root) {
if(root == null){
return null;
}
TreeNode result = root;
traverse(result, true);
return result;
}
private boolean traverse(TreeNode root, boolean flag){
if(root == null){
return flag;
}
boolean flag1 = traverse(root.left, flag);
if(flag1){
root.left = null;
}
boolean flag2 = traverse(root.right, flag);
if(flag2){
root.right = null;
}
if(root.val == 1){
return false;
}
return true && flag1 && flag2;
}
网友评论