剑指 Offer II 047. 二叉树剪枝
题目要求
leetcode地址
给定一个二叉树 根节点 root ,树的每个节点的值要么是 0,要么是 1。请剪除该二叉树中所有节点的值为 0 的子树。
节点 node 的子树为 node 本身,以及所有 node 的后代。
示例1
输入: [1,null,0,0,1]
输出: [1,null,0,null,1]
解释:
只有红色节点满足条件“所有不包含 1 的子树”。
右图为返回的答案。
示例2
输入: [1,0,1,0,0,0,1]
输出: [1,null,1,null,1]
解释:
示例3
输入: [1,1,0,1,1,0,1,0]
输出: [1,1,0,1,1,null,1]
解释:
提示
- 二叉树的节点个数的范围是 [1,200]
- 二叉树节点的值只会是 0 或 1
思路
根据题意和示例,我们可以比较清晰地找到剪枝的条件有两个:
- node.val == 0;
- node.left == null && node.right == null
因此,我们可以利用深度优先搜索遍历节点的子节点,递归,即可得到最终答案。
代码实现(java)
1 |
|
代码实现(golang)
1 |
|
剑指 Offer II 047. 二叉树剪枝
https://liuxx1106.github.io/2023/08/03/algorithm-offer047/