给定一个二叉树 根节点 root ,树的每个节点的值要么是 0,要么是 1。请剪除该二叉树中所有节点的值为 0 的子树。

    节点 node 的子树为 node 本身,以及所有 node 的后代。

    示例 1:

    输入: [1,null,0,0,1]
    输出: [1,null,0,null,1]
    解释:
    只有红色节点满足条件“所有不包含 1 的子树”。
    右图为返回的答案。
    image.png

    示例 2:

    输入: [1,0,1,0,0,0,1]
    输出: [1,null,1,null,1]
    解释:

    示例 3:

    输入: [1,1,0,1,1,0,1,0]
    输出: [1,1,0,1,1,null,1]
    解释:

    提示:

    二叉树的节点个数的范围是 [1,200]
    二叉树节点的值只会是 0 或 1


    1. class Solution {
    2. /**
    3. 本题采用dfs,当满足三个条件时就删除节点
    4. 当root.val == 0 && root.left == null && root.right == null
    5. */
    6. public TreeNode pruneTree(TreeNode root) {
    7. TreeNode res = dfs(root);
    8. return res;
    9. }
    10. public TreeNode dfs(TreeNode root) {
    11. if (root == null) return null;
    12. root.left = dfs(root.left);
    13. root.right = dfs(root.right);
    14. if (root.val == 0 && root.left == null && root.right == null)
    15. root = null;
    16. return root;
    17. }
    18. }