携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第29天,点击查看活动详情
一、题目描述:
给你二叉树的根结点 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.val 为 0 或 1
来源:力扣(LeetCode) 链接:leetcode.cn/problems/bi… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、思路分析:
用一个DFS式的函数来判断某一个节点是否可剪。 如果根为0,左右皆可剪,那么返回null,整个树都干掉 如果左可剪,左子置为null,否则递归处理左子树 如果右可剪,右子置为null,否则递归处理右子树 返回根节点
三、AC 代码:
class Solution {
public TreeNode pruneTree(TreeNode root) {
return dfs(root);
}
//dfs函数的含义是传入当前节点,返回去除0后的节点
private TreeNode dfs(TreeNode root){
//output of dfs
if(root==null){
return null;
}
//叶子节点的情况
if(root.left==null&&root.right==null){
if(root.val==0){
return null;
}else if(root.val==1){
return root;
}
}
//后序遍历
root.left=dfs(root.left);
root.right=dfs(root.right);
//当后序遍历完,发现当前节点的左右孩子都是null并且当前节点的值是0的情况下,返回null
if (root.left==null&&root.right==null&&root.val==0){
return null;
}
return root;
}
}
四、总结:
掘友们,解题不易,留下个赞或评论再走吧!谢啦~ 💐
希望对你有帮助
期待下次再见~
🌇 点赞 👍 收藏 ⭐留言 📝 一键三连 ~关注从你我做起!