目录

0814:二叉树剪枝(1380 分)

力扣第 814 题

题目

给你二叉树的根结点 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

分析

递归即可,若 node 剪枝后的左子树或右子树非空或者根节点为 1,则代表 node 包含 1,否则返回 None。

解答

1
2
3
4
5
6
7
def pruneTree(self, root: TreeNode) -> TreeNode:
    def help(node):
        if not node:
            return None
        node.left, node.right = help(node.left), help(node.right)
        return node if node.left or node.right or node.val==1 else None
    return help(root)

32 ms