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

刷题笔记day15-二叉树层序遍历

层序遍历

/*** Definition for a binary tree node.* type TreeNode struct {*     Val int*     Left *TreeNode*     Right *TreeNode* }*/import ("container/list"
)func levelOrder(root *TreeNode) [][]int {// 思路1:此处肯定要使用队列result := [][]int{}if root == nil {return result}stack := list.New()stack.PushBack(root)for stack.Len() > 0 {stackLength := stack.Len()// 遍历每一层的所有节点newLis := []int{}for i := 0; i < stackLength; i++ {top := stack.Remove(stack.Front())node := top.(*TreeNode)newLis = append(newLis, node.Val)if node.Left != nil {stack.PushBack(node.Left)}if node.Right != nil {stack.PushBack(node.Right)}}result = append(result, newLis)}return result
}

107. 二叉树的层序遍历 II

这个题的意思是从底到上进行层次遍历。我就直接将上一题的从上到下的遍历结果,做一次翻转既可。

/*** Definition for a binary tree node.* type TreeNode struct {*     Val int*     Left *TreeNode*     Right *TreeNode* }*/func levelOrderBottom(root *TreeNode) [][]int {// 思路:相当于是之前从顶往下的结果,反转一下// 这次使用自定义的队列吧,就不使用 container/list 了var (result [][]int)if root == nil {return result}var que []*TreeNodeque = append(que, root)for len(que) > 0 {length := len(que)partResult := []int{}for i := 0; i < length; i++ {front := que[0]que = que[1:]partResult = append(partResult, front.Val)if front.Left != nil {que = append(que, front.Left)}if front.Right != nil {que = append(que, front.Right)}}result = append(result, partResult)}// 反转结果var newResult [][]intfor i := len(result) - 1; i >= 0; i-- {newResult = append(newResult, result[i])}return newResult
}

199. 二叉树的右视图

目的:
思路:还是层次遍历,判断每一层 index 是否是最后一个。如果是,则将结果追加到result中。

/*** Definition for a binary tree node.* type TreeNode struct {*     Val int*     Left *TreeNode*     Right *TreeNode* }*/
import "container/list"func rightSideView(root *TreeNode) []int {// 我的思路是,层次遍历,每次访问一层的最右边的点。var result []intif root == nil {return result}que := list.New()que.PushBack(root)for que.Len() > 0 {length := que.Len()for i := 0; i < length; i++ {front := que.Remove(que.Front())node := front.(*TreeNode)// 每层最后一个放入result中。if i == length - 1 {result = append(result, node.Val)}if node.Left != nil {que.PushBack(node.Left)}if node.Right != nil {que.PushBack(node.Right)}}}return result
}

637. 二叉树的层平均值

还是层次遍历的思路,计算每一层的平均值。

/*** Definition for a binary tree node.* type TreeNode struct {*     Val int*     Left *TreeNode*     Right *TreeNode* }*/
import "container/list"func averageOfLevels(root *TreeNode) []float64 {// 思路:还是层次遍历,计算每一层的平均值。var result []float64if root == nil {return result}que := list.New()que.PushBack(root)for que.Len() > 0 {sum := 0length := que.Len()for i := 0; i < length; i++ {front := que.Remove(que.Front())node := front.(*TreeNode)sum += node.Valif node.Left != nil {que.PushBack(node.Left)}if node.Right != nil {que.PushBack(node.Right)}}result = append(result, float64(sum) / float64(length))}return result
}

429. N 叉树的层序遍历

换汤不换药

/*** Definition for a Node.* type Node struct {*     Val int*     Children []*Node* }*/import "container/list"func levelOrder(root *Node) [][]int {// 思路大差不差,依旧是层次遍历var result [][]intif root == nil {return result}que := list.New()que.PushBack(root)for que.Len() > 0 {length := que.Len()var partResult []intfor i := 0; i < length; i++ {front := que.Remove(que.Front())node := front.(*Node)partResult = append(partResult, node.Val)for _, item := range node.Children {que.PushBack(item)}}result = append(result, partResult)}return result
}

515.在每个树⾏中找最⼤值

/*** Definition for a binary tree node.* type TreeNode struct {*     Val int*     Left *TreeNode*     Right *TreeNode* }*/
func largestValues(root *TreeNode) []int {var result []intif root == nil {return result}que := list.New()que.PushBack(root)for que.Len() > 0 {length := que.Len()maxValue := que.Front().Value.(*TreeNode).Valfor i := 0; i < length; i++ {front := que.Remove(que.Front())node := front.(*TreeNode)// 每层最后一个放入result中。if node.Val > maxValue {maxValue = node.Val}if node.Left != nil {que.PushBack(node.Left)}if node.Right != nil {que.PushBack(node.Right)}}result = append(result, maxValue)}return result
}

226.翻转二叉树

不可以使用 中序遍历,因为左边的调整完后,返回到根节点后,左边的换到右边,这是又开始调整“左边的”了,相当与右边的没动。
可是使用前序遍历、后序遍历。

/*** Definition for a binary tree node.* type TreeNode struct {*     Val int*     Left *TreeNode*     Right *TreeNode* }*/
func invertTree(root *TreeNode) *TreeNode {// 思路:利用递归遍历,进行调整// 不可以使用 中序遍历,因为左边的调整完后,返回到根节点后,左边的换到右边,这是又开始调整“左边的”了,相当与右边的没动。// 三部曲:参数和返回值、单层逻辑、终止条件// 前序遍历:根左右if root == nil {return nil}root.Left, root.Right = root.Right, root.LeftinvertTree(root.Left)invertTree(root.Right)return root
}

相关文章:

刷题笔记day15-二叉树层序遍历

层序遍历 /*** Definition for a binary tree node.* type TreeNode struct {* Val int* Left *TreeNode* Right *TreeNode* }*/import ("container/list" )func levelOrder(root *TreeNode) [][]int {// 思路1&#xff1a;此处肯定要使用队列result : …...

前端 JS 经典:ES6 和 CommonJs 用法

1. 概念 都是 JavaScript 模块化规范&#xff0c;ES6 适用于浏览器端和 Node.js&#xff0c;CommonJs 适用于 Node.js。 2. 导出 // ES6 export function demo(n1, n2) {return n1 n2; }// CommonJS module.exports {demo: function (n1, n2) {return n1 n2;}, }; 3. 引入 …...

MacOS升级后命令行出现xcrun: error: invalid active developer path报错信息

在Mac上用g编译cpp文件时&#xff0c;出现以下&#xff08;类似于工具环境问题的&#xff09;报错&#xff1a; 解决方案&#xff1a;重新安装最新版的MacOS Command Line Tools xcode-select --install重新尝试编译&#xff1a; 编译成功&#xff08;忽略这个warning&…...

【Qt】QPalette

2023年11月10日&#xff0c;周五上午 Palette意为“调色板”。 QPalette是Qt中用于管理控件调色板&#xff08;颜色方案&#xff09;的类。它允许你为Qt应用程序中的控件设置不同的颜色&#xff0c;以满足视觉设计需求。 QPalette可以管理各种控件的颜色属性&#xff0c;如前…...

专门为Web应用程序提供安全保护的设备-WAF

互联网网站面临着多种威胁&#xff0c;包括网络钓鱼和人为的恶意攻击等。这些威胁可能会导致数据泄露、系统崩溃等严重后果。 因此&#xff0c;我们需要采取更多有效的措施来保护网站的安全。其中WAF&#xff08;Web application firewall&#xff0c;Web应用防火墙&#xff0…...

Android Camera App启动流程解析

前言&#xff1a;做了7年的camera app开发&#xff0c;给自己一个总结&#xff0c;算是对camera的一次告白吧。Camera被大家誉为手机的眼睛&#xff0c;是现在各大手机厂商的卖点&#xff0c;也是各大厂商重点发力的地方。Camera的重要性我就不在这里赘述了&#xff0c;让我们进…...

[工业自动化-8]:西门子S7-15xxx编程 - PLC主站 - CPU模块

目录 前言&#xff1a; 一、概述 二、CPU操作和显示 三、安装 四、CPU的选择 前言&#xff1a; 一、概述 西门子S7-1500系列是一系列高性能工业自动化控制器&#xff0c;广泛应用于制造业、自动化生产、物流等领域。这个系列的控制器是设计用来满足高性能、高效能要求的复…...

QT事件循环和事件队列的理解

Qt的事件循环机制_qt事件循环流程-CSDN博客 QT-事件循环机制_qt线程事件循环-CSDN博客 一、事件处理流程如图所示&#xff1a; 1.QCoreApplication::postEvent(QObject *receiver,QEvent *event)&#xff1a; QCoreApplication::postEvent()函数用于将事件异步地发送到目标对…...

【Android】画面卡顿优化列表流畅度一

卡顿渲染耗时如图&#xff1a; 卡顿表现有如下几个方面&#xff1a; 网络图片渲染耗时大上下滑动反应慢&#xff0c;甚至画面不动新增一页数据加载渲染时耗时比较大&#xff0c;上下滑动几乎没有反应&#xff0c;画面停止没有交互响应 背景 实际上这套数据加载逻辑已经运行…...

SNP应邀参加2023中国企业数字化转型峰会暨赛意用户大会

创新驱动科技&#xff0c;数智驱动未来。如今&#xff0c;我国产业数字化进程提速升级&#xff0c;数字产业化规模持续壮大。数据显示&#xff0c;2022年&#xff0c;我国数字经济规模达50.2万亿元&#xff0c;总量稳居世界第二。数字经济已经成为推动传统产业转型升级、促进高…...

黑豹程序员-架构师学习路线图-百科:Knife4j API接口文档管理

文章目录 由来&#xff1a;接口文档第一代&#xff1a;Swagger第二代&#xff1a;Knife4j界面 由来&#xff1a;接口文档 古老编程是一个语言前后端通吃&#xff0c;ASP、JSP、PHP都是如此。 但随着项目规模变大&#xff0c;项目团队也开始壮大&#xff0c;岗位职责开始细分&a…...

PHP安全问题:远程溢出、DoS、safe_mode绕过漏洞

一、Web 服务器安全 PHP 其实不过是 Web服务器的一个模块功能,所以首先要保证 Web服务器的安全。当 然 Web服务器要安全又必须是先保证系统安全,这样就扯远了, 无穷无尽。PHP可以和各种 Web 服务器结合,这里也只讨论 Apache。非常建议以 chroot 方式安装启动 Apache,这样…...

2023云计算发展

未来的云计算世界将是一个充满着无限可能和创意的世界。在这个世界中&#xff0c;人们可以通过云计算技术实现更加便捷、安全、高效的日常生活&#xff0c;同时可以探索更加广阔、神奇的世界。 智能家居将成为云计算的新宠。未来&#xff0c;人们可以通过语音、手势、传感器等…...

javaSE学习笔记(六)泛型,异常

五、泛型 泛型的由来&#xff1a;通过Object转型问题引入--为了解决安全隐患 早期的Object类型可以接收任意的对象类型&#xff0c;但是在实际的使用中&#xff0c;会有类型转换异常的问题 泛型作用 提高安全性(将运行期的错误转换到编译期) 省去强转的麻烦&#xff0c;取…...

C/C++轻量级并发TCP服务器框架Zinx-游戏服务器开发006:基于redis查找玩家姓名+游戏业务实现总结

文章目录 1 Redis的安装与API的使用1.1 安装目录及环境变量1.2 设置远程客户端连接和守护进程1.3 启动redis1.4 Hiredis API的使用1.5 我的动态库和头文件 2 Redis的使用2.1 初始化时候2.2 结束的时候 3 测试4 Makefile5 游戏业务总结 1 Redis的安装与API的使用 1.1 安装目录及…...

数字政府!3DCAT实时云渲染助推上海湾区数字孪生平台

数字孪生&#xff0c;是一种利用物理模型、传感器数据、运行历史等信息&#xff0c;在虚拟空间中构建实体对象或系统的精确映射&#xff0c;从而实现对其全生命周期的仿真、优化和管理的技术。数字孪生可以应用于各个领域&#xff0c;如工业制造、智慧城市、医疗健康、教育培训…...

react之Component存在的2个问题

问题 只要执行setState()&#xff0c;即使不改变状态数据&#xff0c;组件也会重新render()只当前组件重新render()&#xff0c;就会自动重新render子组件 原因 Component中的shouldComponentUpdate()总是返回true 思路 只有当组件的state或props数据发生改变时才重新rend…...

【论文阅读】Generating Radiology Reports via Memory-driven Transformer (EMNLP 2020)

资料链接 论文原文&#xff1a;https://arxiv.org/pdf/2010.16056v2.pdf 代码链接&#xff08;含数据集&#xff09;&#xff1a;https://github.com/cuhksz-nlp/R2Gen/ 背景与动机 这篇文章的标题是“Generating Radiology Reports via Memory-driven Transformer”&#xf…...

IP协议相关技术

文章目录 IP协议相关技术仅凭IP无法完成通信DNSARP IP协议相关技术 仅凭IP无法完成通信 人们在上网的时候其实很少直接输入某个具体的IP地址。 在访问Web站点和发送、接收电子邮件时&#xff0c;我们通常会直接输入Web网站的地址或电子邮件地址等那些由应用层提供的地址&…...

Visual Studio2022安装教程【图文详解】(大一小白)编译软件

工欲善其事&#xff0c;必先利其器。想要学好编程&#xff0c;首先要把手中的工具利用好&#xff0c;今天小编教一下大家如何下载安装并使用史上最强大的编译器--Visual Studio&#x1f357; 一.Visual Studio下载及安装 https://visualstudio.microsoft.com/ 打开文件 点击.ex…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机&#xff0c;点进去 点进去 查看URL&#xff0c;有 ?fileflag.php说明存在文件包含&#xff0c;原理是php://filter 协议 当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执行。 用php://filter加编码&#xff0c;能让PHP把文件内容…...

Kafka主题运维全指南:从基础配置到故障处理

#作者&#xff1a;张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1&#xff1a;主题删除失败。常见错误2&#xff1a;__consumer_offsets占用太多的磁盘。 主题日常管理 …...

云安全与网络安全:核心区别与协同作用解析

在数字化转型的浪潮中&#xff0c;云安全与网络安全作为信息安全的两大支柱&#xff0c;常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异&#xff0c;并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全&#xff1a;聚焦于保…...

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...

Java中HashMap底层原理深度解析:从数据结构到红黑树优化

一、HashMap概述与核心特性 HashMap作为Java集合框架中最常用的数据结构之一&#xff0c;是基于哈希表的Map接口非同步实现。它允许使用null键和null值&#xff08;但只能有一个null键&#xff09;&#xff0c;并且不保证映射顺序的恒久不变。与Hashtable相比&#xff0c;Hash…...

【阅读笔记】MemOS: 大语言模型内存增强生成操作系统

核心速览 研究背景 ​​研究问题​​&#xff1a;这篇文章要解决的问题是当前大型语言模型&#xff08;LLMs&#xff09;在处理内存方面的局限性。LLMs虽然在语言感知和生成方面表现出色&#xff0c;但缺乏统一的、结构化的内存架构。现有的方法如检索增强生成&#xff08;RA…...

高保真组件库:开关

一:制作关状态 拖入一个矩形作为关闭的底色:44 x 22,填充灰色CCCCCC,圆角23,边框宽度0,文本为”关“,右对齐,边距2,2,6,2,文本颜色白色FFFFFF。 拖拽一个椭圆,尺寸18 x 18,边框为0。3. 全选转为动态面板状态1命名为”关“。 二:制作开状态 复制关状态并命名为”开…...

项目进度管理软件是什么?项目进度管理软件有哪些核心功能?

无论是建筑施工、软件开发&#xff0c;还是市场营销活动&#xff0c;项目往往涉及多个团队、大量资源和严格的时间表。如果没有一个系统化的工具来跟踪和管理这些元素&#xff0c;项目很容易陷入混乱&#xff0c;导致进度延误、成本超支&#xff0c;甚至失败。 项目进度管理软…...

第14节 Node.js 全局对象

JavaScript 中有一个特殊的对象&#xff0c;称为全局对象&#xff08;Global Object&#xff09;&#xff0c;它及其所有属性都可以在程序的任何地方访问&#xff0c;即全局变量。 在浏览器 JavaScript 中&#xff0c;通常 window 是全局对象&#xff0c; 而 Node.js 中的全局…...

【AI学习】wirelessGPT多任务无线基础模型摘要

收看了关于WirelessGPT多任务无线基础模型的演讲视频&#xff0c;边做一个记录。 应该说&#xff0c;在无线通信大模型的探索方面&#xff0c;有一个非常有益的尝试。 在沈学明院士带领下开展 https://www.chaspark.com/#/live/1125484184592834560...