一、题目描述
来源 https://leetcode-cn.com/problems/pOCWxh/
二、思路
使用递归的思想,一棵子树可以被剪除的条件是:
- 根节点的左子树可以被剪除或者为
null
; - 根节点的右子树可以被剪除或者为
null
; - 根节点本身是0而不是1。
该根节点的左右子树使用同样的判断方法。
三、代码(Java)
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
private boolean flag = false;
private boolean isZoreTree(TreeNode node){
if(node != null){
boolean shouldDel = true;
if(isZoreTree(node.left)){
node.left = null;
}else{
shouldDel = false;
}
if(isZoreTree(node.right)){
node.right = null;
}else{
shouldDel = false;
}
if(node.val == 1){
shouldDel = false;
}
if(shouldDel){
return true;
}else{
return false;
}
}
return true;
}
public TreeNode pruneTree(TreeNode root) {
if(root != null){
if(isZoreTree(root)){
root = null;
}
}
return root;
}
}