814. 二叉树剪枝

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-pruning
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


原题目不好理解,就是如果子树都是0那么就删除子树。

其实是一道回溯的题目,遍历到叶子节点后,返回,如果左右子树返回的不是null,说明这个节点是不能删除的,返回这个节点。
如果返回的都是null,就判断下这个节点要不要删除在,值是1不删除;值是0删除,即返回null;

    public TreeNode pruneTree(TreeNode root) {
        
        if(root == null) {
            return null;
        }
        // 得到左右子树返回的节点
        TreeNode left = pruneTree(root.left);
        TreeNode right = pruneTree(root.right);
        //这一步很重要,重新给该节点赋值
        root.left = left;
        root.right = right;
        // 如果返回的不是null, 说明该节点是不能删除的,
        if(left != null || right != null) {
            return root;
        }
        // 如果返回的都是null,则需要判断下该节点的值,是1,不能删,是0,删除
        return root.val == 0 ? null: root;

    }
posted @ 2022-02-23 17:03  一颗青菜  阅读(3)  评论(0)    收藏  举报