一、题目描述

来源 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;
    }
}
posted on 2021-10-20 21:08  滔特特  阅读(31)  评论(0编辑  收藏  举报