移除不包含 1 的二叉树子树
题目描述
给定一棵二叉树的根节点 root
,树的每个节点的值要么是 0
,要么是 1
。我们需要移除所有不包含 1 的子树,并返回修剪后的原二叉树。
子树的定义: 节点 node
的子树包括 node
本身及其所有后代节点。如果一个子树完全不包含值为 1
的节点,则该子树应被删除。
解题分析
为了实现这一目标,我们的核心思想是递归地遍历二叉树,对于每个节点检查它的左右子树是否包含 1
,并决定是否保留该节点。
具体来说:
- 如果一个节点的值为
1
,或者该节点的子树包含1
,那么保留该节点。 - 如果一个节点的值为
0
,且它的左右子树都不包含1
,那么删除这个节点。 - 对于每个节点的左右子树,我们递归地执行上述步骤。
解题方法
这个问题可以通过 深度优先搜索 (DFS) 进行解决。在 DFS 过程中,我们可以自底向上修剪树,遍历到一个节点时,首先修剪其左右子树,然后判断当前节点是否应该保留。
递归修剪思路:
- 递归修剪子树: 对于每个节点,先递归修剪它的左右子树。