[LeetCode][LCR151]彩灯装饰记录 III——队列

2024-03-10 09:36

本文主要是介绍[LeetCode][LCR151]彩灯装饰记录 III——队列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目

LCR 151. 彩灯装饰记录 III

一棵圣诞树记作根节点为 root 的二叉树,节点值为该位置装饰彩灯的颜色编号。请按照如下规则记录彩灯装饰结果:

  • 第一层按照从左到右的顺序记录
  • 除第一层外每一层的记录顺序均与上一层相反。即第一层为从左到右,第二层为从右到左。

示例:
在这里插入图片描述

输入:root = [8,17,21,18,null,null,6] 输出:[[8],[21,17],[18,6]]

提示:

节点总数 <= 1000

解法

  1. 奇数层和偶数层分开考虑,奇数层从左到右记录,偶数层从右到左记录
  2. 比如当前层是奇数层,那么从左到右输出当前节点,而从右到左记录当前节点的右子树和左子树
  3. 如果当前层是偶数层,则从右到左输出当前节点,从左到右记录当前节点的左子树和右子树
  4. 根据彩灯装饰记录 II,可以使用队列进行记录,并且每次都输出队列中同一层的元素而不输出其他层元素(也就是在增加下一层元素之前,先记录下队列中已有的元素个数(也就是当前层的元素个数))
  5. 如果当前层是奇数层,在从左到右输出当前节点的同时,需要从右到左地记录当前节点的子节点,子节点应该放在右边,以免在输出当前节点的时候被输出了
  6. 如果当前层是偶数层,在从右向左输出当前节点的同时,需要从左到右记录当前节点的子节点,子节点应该放在左边,以免在从右向左输出当前节点时被输出了
  7. 按以上的分析,需要使用双端队列来实现
/*** 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:vector<vector<int>> decorateRecord(TreeNode* root) {vector<vector<int>> ans;if(!root) return ans;deque<TreeNode*> dq;dq.push_back(root);int layerNum=0;while(!dq.empty()){++layerNum;vector<int> v;int size=dq.size();for(int i=0; i<size; ++i){if(layerNum%2){//奇数层从左到右v.push_back(dq.front()->val);if(dq.front()->left) dq.push_back(dq.front()->left);if(dq.front()->right) dq.push_back(dq.front()->right);dq.pop_front();}else{v.push_back(dq.back()->val);if(dq.back()->right) dq.push_front(dq.back()->right);if(dq.back()->left) dq.push_front(dq.back()->left);dq.pop_back();}}   ans.push_back(v);     }return ans;}
};

这篇关于[LeetCode][LCR151]彩灯装饰记录 III——队列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/793818

相关文章

Spring Boot整合消息队列RabbitMQ的实现示例

《SpringBoot整合消息队列RabbitMQ的实现示例》本文主要介绍了SpringBoot整合消息队列RabbitMQ的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录RabbitMQ 简介与安装1. RabbitMQ 简介2. RabbitMQ 安装Spring

Spring Retry 实现乐观锁重试实践记录

《SpringRetry实现乐观锁重试实践记录》本文介绍了在秒杀商品SKU表中使用乐观锁和MybatisPlus配置乐观锁的方法,并分析了测试环境和生产环境的隔离级别对乐观锁的影响,通过简单验证,... 目录一、场景分析 二、简单验证 2.1、可重复读 2.2、读已提交 三、最佳实践 3.1、配置重试模板

在 Spring Boot 中使用异步线程时的 HttpServletRequest 复用问题记录

《在SpringBoot中使用异步线程时的HttpServletRequest复用问题记录》文章讨论了在SpringBoot中使用异步线程时,由于HttpServletRequest复用导致... 目录一、问题描述:异步线程操作导致请求复用时 Cookie 解析失败1. 场景背景2. 问题根源二、问题详细分

如何通过Python实现一个消息队列

《如何通过Python实现一个消息队列》这篇文章主要为大家详细介绍了如何通过Python实现一个简单的消息队列,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录如何通过 python 实现消息队列如何把 http 请求放在队列中执行1. 使用 queue.Queue 和 reque

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)

《解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)》该文章介绍了使用Redis的阻塞队列和Stream流的消息队列来优化秒杀系统的方案,通过将秒杀流程拆分为两条流水线,使用Redi... 目录Redis秒杀优化方案(阻塞队列+Stream流的消息队列)什么是消息队列?消费者组的工作方式每

将sqlserver数据迁移到mysql的详细步骤记录

《将sqlserver数据迁移到mysql的详细步骤记录》:本文主要介绍将SQLServer数据迁移到MySQL的步骤,包括导出数据、转换数据格式和导入数据,通过示例和工具说明,帮助大家顺利完成... 目录前言一、导出SQL Server 数据二、转换数据格式为mysql兼容格式三、导入数据到MySQL数据

关于rpc长连接与短连接的思考记录

《关于rpc长连接与短连接的思考记录》文章总结了RPC项目中长连接和短连接的处理方式,包括RPC和HTTP的长连接与短连接的区别、TCP的保活机制、客户端与服务器的连接模式及其利弊分析,文章强调了在实... 目录rpc项目中的长连接与短连接的思考什么是rpc项目中的长连接和短连接与tcp和http的长连接短

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat