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

news/2024/10/18 9:17:09/

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.ppmy.cn/news/1532656.html

相关文章

Python3 爬虫教程 - Web 网页基础

Web网页基础 1&#xff0c;网页的组成HTMLcssJavaScript2&#xff0c;网页的结构 3&#xff0c;节点树及节点间的关系4&#xff0c;选择器开头代表选择 id&#xff0c;其后紧跟 id 的名称。如&#xff1a;div 节点的 id 为 container&#xff0c;那么就可以表示为 #container 1…

监控告警功能详细介绍及操作演示:运维团队的智能保障

在当今这个信息化高速发展的时代&#xff0c;运维团队面临着前所未有的挑战。为了确保系统的稳定性和高效运维&#xff0c;监控告警功能成为了运维团队不可或缺的得力助手。本文将详细介绍我们的监控告警功能&#xff0c;并结合实际操作页面进行演示&#xff0c;帮助运维团队更…

目前最好用的爬虫软件是那个?

作为一名数据工程师&#xff0c;三天两头要采集数据&#xff0c;用过十几种爬虫软件&#xff0c;也用过Python爬虫库&#xff0c;还是建议新手使用现成的软件比较方便。 这里推荐3款不错的自动化爬虫工具&#xff0c;八爪鱼、亮数据、Web Scraper 1. 八爪鱼爬虫 八爪鱼爬虫是一…

DMDSC更换DCR和VOTE磁盘

DMDSC更换DCR和VOTE磁盘 为了提高DMDSC集群运行速度和节点之间通信协调的效率&#xff0c;需要将运行在机械盘上的dcr和vote磁盘替换到SSD高效磁盘上。将原来200M的dcr和vote机械磁盘&#xff0c;换成500M的SSD高效磁盘。 磁盘替换规划信息如下所示&#xff1a; 信息说明 替…

深度学习模型之BERT的24个小模型源码与预训练紧凑模型的重要性

原始信息 论文&#xff1a; Well-Read Students Learn Better: On the Importance of Pre-training Compact Models作者&#xff1a;Iulia Turc, Ming-Wei Chang, Kenton Lee, Kristina Toutanova地址&#xff1a;arxiv.org/pdf/1908.08…中文&#xff1a;阅读良好的学生学得更…

OJ在线评测系统 前端 完善题目提交服务 细讲异步前端请求与后端接口交互

题目提交服务完善 这则笔记是我们来梳理一下前后端逻辑 主要是我们的提交逻辑 先是看前端 按钮绑定的是这个异步请求 async 关键字表示这个函数内部会使用 await 来等待异步操作完成。 异步提交表单数据 const doSubmit async () > {// message.error("刷题机架构…

2024年7月大众点评全国美食店铺基础信息分析

在做一些城市分析、学术研究分析、商业选址、商业布局分析等数据分析挖掘时&#xff0c;大众点评的数据参考价值非常大&#xff0c;截至2024年7月&#xff0c;大众点评美食店铺剔除了暂停营业、停止营业后的最新数据情况分析如下。 分析研究的字段维度包括大众点评数字id、字母…

掌握自动化测试必要的几种技能?

1.自动化测试员技能——编程语言 当我开始担任手动测试人员时&#xff0c;我不喜欢编码。但是&#xff0c;当我逐渐进入自动化领域时&#xff0c;对我来说很清楚&#xff0c;如果没有对编程语言的一些基本了解&#xff0c;就无法编写逻辑自动化测试脚本。 对编程有一点了解&a…