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

【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;}
}

相关文章:

  • YOLO12改进-模块-引入边缘 - 可学习局部显著核模块LLSKM 引导网络捕捉小目标的点、边缘等显著特征,提升检测敏感性与多尺度适应性。
  • 为网页LOGO视频增加电影质感表现
  • 论文阅读的三个步骤
  • 【语法】C++的继承
  • 篮球足球体育球员综合资讯网站模板
  • hutools工具类中isNotEmpty与isNotBlank区分
  • 关闭正点原子atk-qtapp-start.service
  • 企业办公协同平台安全一体化生态入住技术架构与接口标准分析报告
  • Day16(贪心算法)——LeetCode45.跳跃游戏II763.划分字母区间
  • 机器学习实操 第一部分 机器学习基础 第6章 决策树
  • 高定电视,一场关于生活方式的觉醒
  • 基于 ARM 的自动跟拍云台设计
  • 第六章 QT基础:7、Qt中多线程的使用
  • Vue常用的修饰符有哪些有什么应用场景(含deep seek讲解)
  • 嵌入式设备异常掉电怎么办?
  • 第三方软件测试报告如何凭借独立公正与专业权威发挥关键作用?
  • CA校验主辅小区配置及UE能力
  • 通过 Node.js 搭配 Nodemailer 实现邮箱验证码发送
  • 分治而不割裂—分治协同式敏捷工作模式
  • Plant Simulation MultiPortalCrane Store 小案例
  • 解放日报头版聚焦“人民城市”:共建共享展新卷
  • 葡萄牙、西班牙发生大范围停电
  • 恒瑞医药赴港上市获证监会备案,拟发行不超8.15亿股
  • 张译、惠英红分获第二十届中国电影华表奖优秀男、女演员奖
  • 高璞任中国一汽党委常委、副总经理
  • 新任浙江省委常委、组织部长杨荫凯到嘉兴南湖瞻仰红船