一、题目

给你二叉树的根结点root,此外树的每个结点的值要么是0,要么是1

返回移除了所有不包含1的子树的原二叉树。

节点node的子树为node本身加上所有node的后代。

示例 1:

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

示例 2:

输入:root = [1,0,1,0,0,0,1]输出:[1,null,1,null,1]

示例 3:

输入:root = [1,1,0,1,1,0,1,0]输出:[1,1,0,1,1,null,1]

提示:

  • 树中节点的数目在范围[1, 200]
  • Node.val01

二、思路解析

忽然发现讲了好几篇二叉树的例题,其中涉及到的 “剪枝” 操作我都是一笔带过。这不,今天我找了一道剪枝的题目,我们一块品味一番。

我们先从名字上理解一下,所谓剪枝,就是把树木上的低质量树枝剪掉,以促进整颗树木更好地生长。

而我们今天所讲的剪枝,其实大体也是类似意思,只不过是把 “值为空” 的节点删去。

理解了这些,相信这道题的答案已经浮出水面了,下面是详细代码

三、完整代码

/** * 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 {public TreeNode pruneTree(TreeNode root) {if(root == null){return null;}root.left = pruneTree(root.left);root.right = pruneTree(root.right);if(root.left == null && root.right == null && root.val == 0){root = null;}return root;}}

以上就是本篇博客的全部内容啦,如有不足之处,还请各位指出,期待能和各位一起进步!