剑指 Offer II 047. 二叉树剪枝

server/2025/3/6 2:41:23/

comments: true
edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20047.%20%E4%BA%8C%E5%8F%89%E6%A0%91%E5%89%AA%E6%9E%9D/README.md

剑指 Offer II 047. 二叉树剪枝

题目描述

给定一个二叉树 根节点 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]
  • 二叉树节点的值只会是 01

 

注意:本题与主站 814 题相同:https://leetcode.cn/problems/binary-tree-pruning/

解法

方法一

Python3
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def pruneTree(self, root: TreeNode) -> TreeNode:if not root:return None root.left=self.pruneTree(root.left) #左子树净化root.right=self.pruneTree(root.right) #右子树净化if root.val==0 and not root.left and not root.right:return None #根子树净化return root
Java
/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public TreeNode pruneTree(TreeNode root) {if (root == null) {return null;}root.left = pruneTree(root.left);root.right = pruneTree(root.right);if (root.val == 0 && root.left == null && root.right == null) {return null;}return root;}
}
C++
/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:TreeNode* pruneTree(TreeNode* root) {if (!root) return nullptr;root->left = pruneTree(root->left);root->right = pruneTree(root->right);if (!root->val && !root->left && !root->right) return nullptr;return root;}
};
Go
/*** Definition for a binary tree node.* type TreeNode struct {*     Val int*     Left *TreeNode*     Right *TreeNode* }*/
func pruneTree(root *TreeNode) *TreeNode {if root == nil {return nil}root.Left = pruneTree(root.Left)root.Right = pruneTree(root.Right)if root.Val == 0 && root.Left == nil && root.Right == nil {return nil}return root
}
JavaScript
/*** Definition for a binary tree node.* function TreeNode(val, left, right) {*     this.val = (val===undefined ? 0 : val)*     this.left = (left===undefined ? null : left)*     this.right = (right===undefined ? null : right)* }*/
/*** @param {TreeNode} root* @return {TreeNode}*/
var pruneTree = function (root) {if (!root) return null;root.left = pruneTree(root.left);root.right = pruneTree(root.right);if (root.val == 0 && !root.left && !root.right) {return null;}return root;
};
Swift
/* class TreeNode {
*     var val: Int
*     var left: TreeNode?
*     var right: TreeNode?
*     init() {
*         self.val = 0
*         self.left = nil
*         self.right = nil
*     }
*     init(_ val: Int) {
*         self.val = val
*         self.left = nil
*         self.right = nil
*     }
*     init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
*         self.val = val
*         self.left = left
*         self.right = right
*     }
* }
*/class Solution {func pruneTree(_ root: TreeNode?) -> TreeNode? {guard let root = root else {return nil}root.left = pruneTree(root.left)root.right = pruneTree(root.right)if root.val == 0 && root.left == nil && root.right == nil {return nil}return root}
}

http://www.ppmy.cn/server/172757.html

相关文章

IDEA集成DeepSeek,通过离线安装解决无法安装Proxy AI插件问题

文章目录 引言一、安装Proxy AI1.1 在线安装Proxy AI1.2 离线安装Proxy AI 二、Proxy AI中配置DeepSeek2.1 配置本地部署的DeepSeek(Ollama方式)2.2 通过第三方服务商提供的API进行配置 三、效果测试 引言 许多开发者尝试通过安装Proxy AI等插件将AI能力…

【update 更新数据语法合集】.NET开源ORM框架 SqlSugar 系列

系列文章目录 文章目录 系列文章目录前言 ??一、实体对象更新 1.1 单条与批量1.2 不更新某列1.3 只更新某列1.4 NULL列不更新1.5 无主键/指定列1.6 更新添加条件1.7 大数据更新1.8 重新赋值1:list中的值修改1.9 重新赋值2: 列中的值1 二、根据表达式更新&#xf…

XXL-JOB深度解析:新一代分布式任务调度解决方案

一、任务调度演进之路:从单机到分布式 传统调度方案的痛点 // 传统Spring Task示例 Scheduled(cron "0 0 3 * * ?") public void dailyReportJob() {// 单机执行风险:故障导致任务中断generateDailyReport(); }典型问题: 单点…

玩转顺序表:用 C 语言实现数据的插入与删除

目录 顺序表的定义 插入元素 删除元素 查找元素 主函数 打印顺序表 完整代码 总结 在这篇博客中,我们将探讨如何使用 C 语言实现一个简单的顺序表(也称为动态数组),并实现一些基本操作,包括插入、删除和查找…

Apache IoTDB 树表双模型直播回顾(上)

2 月 26 日面向 Apache IoTDB 树表双模型的功能特性、适用场景、建模选择和未来规划,田原同学通过直播进行了全面解答。以下为直播讲稿(上),干货满满,建议收藏⬇️⬇️ ⚡️注意: 1. 功能演示部分请直接查看…

linux如何在某个文件夹下查看所有文件(层级只到当前文件夹的两层)并找到‘XXXX’ 这个单词

问了AI写的不错,记录一下,排查一些报错的时候比较好用 在 Linux 中,您可以通过命令行工具查看某个文件夹下的所有文件(限制到当前文件夹及其子文件夹两层深度),并搜索包含特定单词(如 XXXXX&am…

基于Selenium的Python淘宝评论爬取教程

文章目录 前言1. 环境准备安装 Python:安装 Selenium:下载浏览器驱动: 2. 实现思路3. 代码实现4. 代码解释5. 注意事项 前言 以下是一个基于 Selenium 的 Python 淘宝评论爬取教程,需要注意的是,爬取网站数据应当遵守…

搭建一个简单的node服务,模拟后端接口

目录 一、查看是否安装了node和npm 二、创建一个文件夹,用于放你的node服务代码 三、初始化一个package.json 四、安装 Express(快速搭建服务的框架) 五、创建serve.js 六、运行服务即可 七、测试接口 法一:使用 curl 法…