当前位置: 首页 > backend >正文

【LeetCode】彩灯装饰记录 III

题目

题目链接

一棵圣诞树记作根节点为 root 的二叉树,节点值为该位置装饰彩灯的颜色编号。请按照如下规则记录彩灯装饰结果:
第一层按照从左到右的顺序记录
除第一层外每一层的记录顺序均与上一层相反。即第一层为从左到右,第二层为从右到左。

思路

层序遍历

解题过程

在层序遍历的过程中收集每层的元素,存入临时数组当一层遍历结束后,根据当前层是奇数还是偶数决定是将临时数组直接推入结果数组还是reverse后再推入。
最后别忘了把临时数组中剩余的元素推入结果数组中。

复杂度

  • 时间复杂度: O(n)
  • 空间复杂度: O(n)

代码

/*** Definition for a binary tree node.* class TreeNode {*     val: number*     left: TreeNode | null*     right: TreeNode | null*     constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {*         this.val = (val===undefined ? 0 : val)*         this.left = (left===undefined ? null : left)*         this.right = (right===undefined ? null : right)*     }* }*/function decorateRecord(root: TreeNode | null): number[][] {if (!root) return [];const queue: TreeNodeWithLevel[] = [];queue.push(new TreeNodeWithLevel(0, root.val, root.left, root.right));const res: number[][] = [];let curLevelRes: number[] = [];let curLevel = 0;while (queue.length) {const cur = queue.shift();const level = cur.level;if (level === curLevel) {// 追加curLevelRes.push(cur.val);} else {// 新的一行curLevel = level;res.push(level % 2 === 1 ? curLevelRes : curLevelRes.reverse());curLevelRes = [cur.val];}if (cur.left) queue.push(new TreeNodeWithLevel(level + 1, cur.left.val, cur.left.left, cur.left.right));if (cur.right) queue.push(new TreeNodeWithLevel(level + 1, cur.right.val, cur.right.left, cur.right.right));console.log(curLevel, queue.map(item => item.val));}curLevel++;res.push(curLevel % 2 === 1 ? curLevelRes : curLevelRes.reverse());return res;
};class TreeNodeWithLevel extends TreeNode {level: number;constructor(level: number, ...args) {super(...args);this.level = level;}
}
http://www.xdnf.cn/news/2955.html

相关文章:

  • 【运维】使用 DataX 实现 MySQL 到 PostgreSQL 的数据同步
  • 苍穹外卖心得体会
  • [stm32] 4-1 USART(1)
  • 流量控制机制
  • 拆固态硬盘短接开卡+ as ssd benchmark查看硬盘读写速度
  • 基于STM32、HAL库的ADS8866IDGSR模数转换器ADC驱动程序设计
  • 华为云Astro大屏从iotda影子设备抽取数据做设备运行状态的大屏实施步骤
  • Android——Serializable和Parcelable
  • Spring、Spring MVC 与 Spring Boot 的关系与核心用途
  • 什么是全景相机?
  • jenkins slave节点打包报错Failed to create a temp file on
  • Android学习总结之Bitmap篇
  • 《数学物理方程》——第一章 引入与基本概念
  • 【AI工具】DeepWiki试用
  • 第十六届蓝桥杯 C/C++ B组 题解
  • 私有云与虚拟化攻防2(OpenStack渗透场景,大部分云平台都是基于此进行二次开发)
  • C++ 类和对象(3)初始化列表、友元函数、内部类
  • 创龙全志T536全国产(4核A55 ARM+RISC-V+NPU 17路UART)工业开发板硬件说明书
  • 免费IP证书申请
  • leetcode day37 474
  • 【论文阅读】PEEKABOO: Interactive Video Generation via Masked-Diffusion
  • 【神经网络与深度学习】改变随机种子可以提升模型性能?
  • DotNet 入门:(一) 环境安装
  • ElasticSearch入门
  • MYSQL三大日志、隔离级别(MVCC+锁机制实现)
  • 代码颜色模式python
  • 五种机器学习方法深度比较与案例实现(以手写数字识别为例)
  • 生活需要一些思考
  • 设计模式 | 详解常用设计模式(六大设计原则,单例模式,工厂模式,建造者模式,代理模式)
  • 力扣——206.反转链表倒序输出链表