每日OJ题_二叉树dfs③_力扣814. 二叉树剪枝

news2024/12/27 11:22:16

目录

力扣814. 二叉树剪枝

解析代码


力扣814. 二叉树剪枝

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.val 为 0 或 1
/**
 * 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) {
        
    }
};

解析代码

题意就是删除所有元素只有0的子树,解题思路就是递归+后序遍历:

        相信递归一定能把左右子树都剪枝了,出口是碰到叶子结点,函数体是如果这个结点的左结点和右结点都为空,并且值为0,就剪掉。

/**
 * 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) {
        /*
        题意就是删除所有元素只有0的子树,解题思路就是递归+后序遍历:
        相信递归一定能把左右子树都剪枝了,出口是碰到叶子结点,
        函数体是如果这个结点的左结点和右结点都为空,并且值为0,就剪掉。
        */
        if(root == nullptr)
            return nullptr;
        
        root->left = pruneTree(root->left);
        root->right = pruneTree(root->right);

        if(root->left == nullptr && root->right == nullptr && root->val == 0)
        {
            delete root; // 可加可不加,面试时可以问结点是不是new出来的,不然会报错
            root = nullptr;
        }            
        return root;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1461697.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

读书笔记-增强型分析:AI驱动的数据分析、业务决策与案例实践

目录 前言 运用人工智能技术,可以使人类社会变得更美好。人们总是期待产品更适合、服务更贴心、生活更便利。在实践中,技术给企业赋能,企业通过优质的产品和服务满足社会,提升人类福祉。很多金融企业已经开始尝试向潜在客户推送…

使用JavaVisualVM排查FullGC问题

1.工具准备 在这里使用 jdk/bin 目录下的 jvisualvm.exe,是自带工具。 2.工具使用 将下载到本地的dump 文件导入工具中,会展示各个类的实例数占比,大小占比。 3.问题排查 前期准备 在分析dump文件之前,我们可以先观察应用中接…

01 前言

目录 什么是CC发展史C的重要性如何学习C关于本专栏 1. 什么是c C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20…

一文了解大数据生态

大数据一词最早指的是传统数据处理应用软件无法处理的过于庞大或过于复杂的数据集。 现在,对“大数据”一词的使用倾向于使用预测分析、用户行为分析或者其他一些从大数据中提取价值的高级数据分析方法,很少用于表示特定规模的数据集。 定义 大数据是…

机器视觉系统选型-为什么还要选用工业光源控制器

工业光源控制器最主要的用途是给光源供电,实现光源的正常工作。 1.开关电源启动时,电压是具有波浪的不稳定电压,其瞬间峰值电压超过了LED灯的耐压值,灯珠在多次高压冲击下严重降低了使用寿命; 2.使用专用的光源控制器&…

Netty中的PooledByteBuf池化原理剖析

PooledByteBuf PooledByteBuf是池化的ByteBuf,提高了内存分配与释放的速度,它本身是一个抽象泛型类, 有三个子类:PooledDirectByteBuf、PooledHeapByteBuf、PooledUnsafeDirectByteBuf. Jemalloc算法 Netty的PooledByteBuf采用与jemalloc一…

SICTF Round#3 の WP

Misc 签到 SICTF{1f4ce05a-0fed-42dc-9510-6e76dff8ff53} Crypto [签到]Vigenere 附件内容: Gn taj xirly gf Fxgjuakd, oe igywnd mt tegbs mnrxxlrivywd sngearbsw wakksre. Bs kpimj gf tank, it bx gur bslenmngn th jfdetagur mt ceei yze Ugnled Lystel t…

NFC三大工作模式及其在物联网应用实例

NFC支持三种通信模式:读写模式、点对点模式和卡模拟模式。在此三种模式下,都仅需简单点击便可启动传输。 在读写模式下,系统执行非接触式读写功能。该系统的NFC芯片与内置NFC的设备-诸如非接触式智能卡、NFC标签或具有NFC功能的智能手机&…

pylint、pyreverse

文章目录 pylintpyreverse pylint github : https://github.com/pylint-dev/pylint官网:https://www.pylint.org文档:https://pylint.readthedocs.io/en/latest/ Pylint 是一个 Python 代码分析工具,它分析 Python 代码中的语法错误&#xf…

【代码随想录python笔记整理】第十二课 · 位置互换

前言:本笔记仅仅只是对内容的整理和自行消化,并不是完整内容,如有侵权,联系立删。 一、变量交换的实现 这节我们讨论一个简单的问题——怎么交换两个变量的值。比如说,一个瓶子里是水,一个瓶子里是油,想要将两个瓶子中的东西互换,我们应该怎么做呢?要实现上述过程,我们…

leetcode hot100 完全平方数

本题中,是给一个整数n,让用完全平方数凑出这个整数,注意,题中给了n的范围,是大于等于1的,也就是说,dp[0]我们可以先不考虑。 整个问题可以抽象成完全背包问题的变形形式,物品就是这…

免费听歌软件,音乐搜索APP:掌中的音乐宝库,为您的音乐生活增添色彩

引言 在数字音乐的浪潮中,我们通常会想到QQ音乐、虾米、网易云音乐等主流平台APP。然而,这些商业软件在为用户提供服务的同时,也不可避免地伴随着一些限制和不尽如人意的地方,如曲库有限、音质不尽如人意或广告干扰或会员才能听歌…

TypeScript中的keyof、typeof、in

概览 TypeScript中的keyof、typeof、in在我们日常工作中经常用到,但也容易遗忘,现详细梳理其用法及使用场景 一. 抛出问题 const getFormatData (initData) > { const data [];// 部分字段取值需保留小数点后两位const formatKeys [priceUntax…

频段划分学习射频知识的意义

一、射频电路设计与低频电路设计的不同点 随着频率提高,相应电磁波的波长与变得可与分立电路元件的尺寸相比拟时,电阻、电容和电感这些元件的电响应,将偏离他们的理想频率特性。以 WIFI 2.4G 频段为例,当频率为 2437MHz&#xff0…

年收入 100 万,不敢生孩子

原文连接: 年收入 100 万,不敢生孩子 今日热帖,有网友发帖称:互联网大头兵夫妇,两个人都 30 了,老公 xhs 后端年包 80,我私企年薪 20 左右,老家三线城市有房。 本来今年要孩子了&am…

花了钱的ChatGPT4.0在绘画方面的能力如何?Sora也能work吗

花了钱的ChatGPT4.0在绘画方面的能力如何?Sora也能work吗 关注微信公众号 DeepGoAI 计算机杂谈及深度学习记录&分享 众所周知 AI绘图是4.0收费的一大卖点 网上也有许多反复训练ChatGPT的段子视频 让人工智能无语 网友直呼 “未来人工智能统治世界了&…

016—pandas 分析近100年圣诞节日期分布

需求: 利用Pandas 分析近100年圣诞节的星期分布,目的是知道圣诞节都在星期几,哪个星期多些。 思路: 用 pd.date_range 生成 100 年日期数据 筛选出12月25日的所有日期 将日期转换为星期几 统计重复值的数量 绘图 二、…

【JAVA高级面试题】运用锁机制实现一个自定义的阻塞队列

文章目录 前言实战演示写在最后 前言 前几天看见一个高级Java面试题,我觉得很有代表意义。既考察了面试者的基本锁机制运用,也了解了阻塞队列的产生实现原理。先分享出来,以供鉴赏。 面试题:实现一个自定义的阻塞队列&#xff0c…

【C++语法基础】4.分支和循环结构(✨新手推荐阅读)

前言 在C编程中,分支和循环结构是控制程序流程的基本工具。分支结构允许程序根据特定条件执行不同的代码块,而循环结构则允许程序重复执行某个代码块。 分支结构 if 语句 if 语句是最基本的分支结构,它根据条件的真假来决定是否执行某段代…

Linux实验记录:使用LNMP架构部署动态网站环境

前言: 本文是一篇关于Linux系统初学者的实验记录。 参考书籍:《Linux就该这么学》 实验环境: VmwareWorkStation 17——虚拟机软件 RedHatEnterpriseLinux[RHEL]8——红帽操作系统 备注: LNMP动态网站部署架构是一套由&…