题目描述:
给你二叉树的根结点 root ,此外树的每个结点的值要么是 0 ,要么是 1 。
返回移除了所有不包含 1 的子树的原二叉树。
节点 node 的子树为 node 本身加上所有 node 的后代。
class Solution {
public TreeNode pruneTree(TreeNode root) {
if(root == null){ //如果节点为空,直接返回空就行
return null;
}
//因为该题需要左右子树都为空,并且当前节点的val值为0时,就把该节点置为空。
//所以需要从下往上处理,分别递归进入最下层的节点,一一向上处理。
//当左右子树满足置为空的条件时,会返回null把节点修改为空。
root.left = pruneTree(root.left);
root.right = pruneTree(root.right);
//当该节点的左子树和右子树都为空,并且val为0时,把该节点置为空,否则直接返回该节点为空即可。
if(root.left == null && root.right == null && root.val == 0){
return null;
}
return root;
}
}
- 时间复杂度 : O(n)
- 空间复杂度 : O(n)