题目描述:
给定二叉树根结点 root ,此外树的每个结点的值要么是 0,要么是 1。
返回移除了所有不包含 1 的子树的原二叉树。
( 节点 X 的子树为 X 本身,以及所有 X 的后代。)
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-pruning
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
- 对于二叉树中的某一个结点,如果要删除该结点,需要满足以下条件:1.该节点的左子树为空;2.该节点的右子树为空;3.该结点值为0。这是删除一个结点的条件,要将整个二叉树中不符合要求的结点都删除,我们可以递归遍历二叉树,对二叉树的每一个结点都进行判断,是否满足删除的要求。
/**
* 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) {
return null;
}
return root;
}
}