【递归】6.LPC 44 开幕式火焰

news2024/9/26 21:42:08

1 题目描述

题目链接:开幕式火焰
在这里插入图片描述

2 解答思路

递归分为三步,接下来就按照这三步来思考问题

第一步:挖掘出相同的子问题  (关系到具体函数头的设计)
第二步:只关心具体子问题做了什么  (关系到具体函数体怎么写,是一个宏观的过程)
第三步:找到递归的出口,防止死递归  (关系到如何跳出递归)

2.1 相同的子问题(函数头设计)

子问题:找一颗二叉树有多少不同的火焰,就是找这颗二叉树的左子树有多少不同的火焰和右子树有多少不同的火焰。

下面是leetcode给的函数头:

    int numColor(TreeNode* root) {        
    }

参数传递的是一颗二叉树。题目中提到“不同的颜色”这里要强调不同的,我们就可以使用一种数据结构哈希表来存储。

因此我们不能用leetcode给的函数头,要自己设计一个,参数传递是TreeNode* unordered_set< int >

该使用什么返回值?我们直接使用了 unordered_set< int >来存储火焰,最后只需要返回 unordered_set< int >size就行了,因此,返回值为void

最终,函数头设计如下:

    void addColors(TreeNode* root, unordered_set<int>& colors)
    {
    }

2.2 具体的子问题做了什么(函数体的实现)

具体子问题的思路就是:判断当前节点是不是不重复的,如果是就加入到 unordered_set< int >中,否则就去左子树中找和右子树中找。

递归的出口:当前节点为空。

    void addColors(TreeNode* root, unordered_set<int>& colors)
    {
        //递归的出口
        if (root == nullptr)
            return;
        
        //将当前值放入到哈希中,如果没有相同的,该值才会进入到哈希中
        colors.insert(root->val);
        //去左子树中寻找
        addColors(root->left, colors);
        //去右子树中寻找
        addColors(root->right, colors);
    }

3 总结

class Solution {
public:
    int numColor(TreeNode* root) {        
        unordered_set<int> colors;
        addColors(root, colors);
        return colors.size();
    }

    void addColors(TreeNode* root, unordered_set<int>& colors)
    {
        //递归的出口
        if (root == nullptr)
            return;
        
        //将当前值放入到哈希中,如果没有相同的,该值才会进入到哈希中
        colors.insert(root->val);
        //去左子树中寻找
        addColors(root->left, colors);
        //去右子树中寻找
        addColors(root->right, colors);
    }
};
1. 相同的子问题:找一颗二叉树有多少不同的火焰,就是找这颗二叉树的左子树有多少不同的火焰和右子树有多少不同的火焰。
2. 具体子问题做了什么:判断当前节点是不是不重复的,如果是就加入到unordered_set< int >中,否则就去左子树中找和右子树中找。
3. 递归的出口:当前节点为空

在这里插入图片描述

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

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

相关文章

那些年我和 ChatGPT 合谋摸鱼的日子

文章目录 那些年我和 ChatGPT 合谋摸鱼的日子1 序个言2 说正事3 这次是真正的正事4 总个结 那些年我和 ChatGPT 合谋摸鱼的日子 1 序个言 看到 CSDN 出这个活动有段时间了&#xff0c;奈何俗务缠身&#xff0c;一直没静下心来想想怎么写。今天碰巧赶上了&#xff0c;就顺便聊聊…

【Linux扩容根分区】LVM分区扩容过程踩坑记录

最近想要给自己使用的Linux操作系统的根分区进行扩容&#xff0c;解决完发现&#xff0c;原来问题如此简单。 特此记录&#xff0c;希望能帮助到有需要的人。 通过df -Th查看系统磁盘分区情况 通过vgdisplay 查看内容 实操过程中&#xff0c;原来红框中&#xff0c;Free PE …

2024年双十一买啥最划算?双十一好物推荐闭眼入!

一年一度的双十一购物狂欢节已悄然临近&#xff0c;这不仅是一场消费者的盛宴&#xff0c;更是各大品牌竞相展示实力、推出优惠的绝佳时机。在这个全民狂欢的日子里&#xff0c;数码产品作为科技与生活的桥梁&#xff0c;相信已经有不少朋友想要大买特买了。无论是追求极致性能…

《python语言程序设计》2018版第8章18题几何circle2D类(下部)

前言、从9.20激动发言到现在一直没有克制住的心情中,回到编程 比如删掉我设计的导入第二个园的x,y,radius的函数我做了之前设计的变化.建立了两个可以将x,y拿出来的函数out计算两个坐标之间的距离利用已知的两个坐标之间的距离来比对第1个园里的半径,看第2个园的坐标是否在第一…

Linux文本内容管理命令_2

find&#xff1a;-查找命令执行文件 which 命令 whereis 命令 type 命令----查看命令类型 alias &#xff08;命令别名&#xff09; cat 查看文件--更新文件时间&#xff0c;再次cat&#xff0c;时间不会改变 touch--会更新所有属性的时间&#xff0c;文件诞生时间不会改变 …

求n的阶乘的相反数(c语言)

1./请编写函数fun&#xff0c;其功能是:计算并输出下列多项式的值: // s11/1!1/2!1/3!1/4!1/5!1/6!1/7!...1/n! //例如&#xff0c;在主函数中从键盘给n输入15&#xff0c;则输出为:s 2.718282。 //注意:要求n的值大于1但不大于100。 2.我们先输入数字n,然后先讲n!的阶乘计算…

NMOS的原理

NMOS&#xff08;N型金属氧化物半导体场效应晶体管&#xff09;是常见的场效应晶体管&#xff08;FET&#xff09;的一种&#xff0c;其主要电极包括D极&#xff08;Drain&#xff09;、S极&#xff08;Source&#xff09;和G极&#xff08;Gate&#xff09;&#xff0c;每个电…

JavaSE——lombok、juint单元测试、断言

一、lombok的使用 默认jvm不解析第三方注解&#xff0c;需要手动开启 链式调用 二、juint单元测试 下载juint包 public class TestDemo {// 在每一个单元测试方法执行之前执行Beforepublic void before() {// 例如可以在before部分创建IO流System.out.println("befor…

【数据结构】栈和队列(Stack Queue)

引言 在对顺序表&#xff0c;链表有了充分的理解之后&#xff0c;现在让我们学习栈和队列&#xff01;&#xff01;&#xff01; 【链表】 &#x1f448;链表 【顺序表】&#x1f448;顺序表 目录 &#x1f4af;栈 1.栈的概念及结构 2.栈的实现 ⭐初始化栈 ⭐入栈 ⭐…

【C++】入门基础知识-1

&#x1f36c;个人主页&#xff1a;Yanni.— &#x1f308;数据结构&#xff1a;Data Structure.​​​​​​ &#x1f382;C语言笔记&#xff1a;C Language Notes &#x1f3c0;OJ题分享&#xff1a; Topic Sharing 目录 前言&#xff1a; C关键字 命名空间 命名空间介…

【论文翻译】AFLGuard: Byzantine-robust Asynchronous Federated Learning

提示&#xff1a;该论文标题为AFLGuard: Byzantine-robust Asynchronous Federated Learning&#xff0c;我将对其进行部分翻译&#xff0c;便于后续阅读。 文章目录 AFLGuard&#xff1a;拜占庭鲁棒的异步联邦学习一、摘要二、引言三、知识前提拜占庭鲁棒联邦学习 四、问题表述…

JVM(HotSpot):程序计数器(Program Counter Register)

文章目录 一、内存结构图二、案例解读三、工作流程四、特点 一、内存结构图 二、案例解读 我们使用javap对字节码进行反编译&#xff0c;来看下程序计数器怎么体现的。 IDEA写一个简单的Java代码 反编译命令 javap -verbose InitTest.class $ javap -verbose InitTest.clas…

解决Typora图片复制到CSDN无法查看问题

下载安装picgo 山东大学镜像源&#xff1a;https://mirrors.sdu.edu.cn/github-release/Molunerfinn_PicGo 开通阿里云对象存储oss 选择创建 填入内容 购买资源包 创建AccessKey 配置PicGo 设定bucket填入创建bucket名称 注意&#xff1a;设定存储区域只需要填写到区域前缀即…

变电站设备检测系统源码分享

变电站设备检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…

C++ 继承:打破代码冗余,提升开发效率

目录 继承的概念和定义 继承的概念 继承的定义 定义格式 继承关系和访问限定符 继承基类成员访问方式的变化 基类和派生类对象赋值转换 继承中的作用域 派生类的默认成员函数 构造函数 拷贝构造 赋值运算符重载 析构函数 继承与友元 继承与静态成员 菱形继承与…

数据库——sql语言学习 查找语句

一、什么是sql SQL是结构化查询语言&#xff08;Structured Query Language&#xff09;的缩写&#xff0c;它是一种专门为数据库设计的操作命令集&#xff0c;用于管理关系数据库管理系统&#xff08;RDBMS&#xff09;。 二、查找相关语句 ‌‌首先&#xff0c;我们已经设…

【SQL】筛选字符串与正则表达式

目录 语法 需求 示例 分析 代码 语法 SELECT column1, column2, ... FROM table_name WHERE condition; WHERE 子句用于指定过滤条件&#xff0c;以限制从数据库表中检索的数据。当你执行一个查询时&#xff0c;WHERE 子句允许你筛选出满足特定条件的记录。如果记录满…

计算计的风向标大转!计算机专业的新纪元已至!

亲爱的读者们&#xff0c; 在这个科技日新月异的时代&#xff0c;计算机专业正以前所未有的速度引领着行业的变革。从传统编程到人工智能、大数据、云计算等新兴技术的崛起&#xff0c;计算机专业的学习与发展路径正经历着翻天覆地的变化。今天&#xff0c;让我们一同探索这个…

短信视频评论dy版提取,免COOKIE 手机版本介绍说明

抖音系统手机版功能介绍说明 一&#xff1a;描述 根据需要升级了手机版本&#xff0c;手机版本和软件版本的功能一样。并且手机版本增加了评论地区筛选功能。&#xff08;后期&#xff1a;1支持自动留痕&#xff0c;自动私信功能。2 支持详细信息和评论提取的tel筛选。3支持A…

15、网络安全合规由来与要素

数据来源&#xff1a;1.网络安全合规由来与要素_哔哩哔哩_bilibili 合规由来 合规&#xff08;Compliance&#xff09;&#xff1a;指服从、顺从和遵从的行为&#xff0c;强调使公司的经营活动与法律、监管及内部规则保持一致。合规涉及公司适应法律法规及社会规范等规则的经营…