6-树-二叉树的层序遍历 II

这是树的第7篇算法,力扣链接。

给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)

示例 1:

输入:root = [3,9,20,null,null,15,7]
输出:[[15,7],[9,20],[3]]

这道题和上一道题的区别是从底向上,那我们层级遍历的逻辑就要改成栈的逻辑存储数据。

栈的模拟逻辑有两种方法,一种是每次插入都使老数据后移:

func levelOrderBottom(root *TreeNode) [][]int {var result [][]intif root == nil {return result}queue := []*TreeNode{root}for len(queue) > 0 {var newQueue []*TreeNodevar subResult []intfor _, node := range queue {subResult = append(subResult, node.Val)if node.Left != nil {newQueue = append(newQueue, node.Left)}if node.Right != nil {newQueue = append(newQueue, node.Right)}}for i := 0; i < len(result); i++ {result[i], subResult = subResult, result[i]}result = append(result, subResult)queue = newQueue}return result
}

还有一种是让数组在最后统一异动len(result)个单位。

func levelOrderBottom(root *TreeNode) [][]int {var result [][]intif root == nil {return result}queue := []*TreeNode{root}for len(queue) > 0 {var newQueue []*TreeNodevar subResult []intfor _, node := range queue {subResult = append(subResult, node.Val)if node.Left != nil {newQueue = append(newQueue, node.Left)}if node.Right != nil {newQueue = append(newQueue, node.Right)}}result = append(result, subResult)queue = newQueue}for i := 0; i < len(result)/2; i++ {result[i], result[len(result)-i-1] = result[len(result)-i-1], result[i]}return result
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/451376.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

servlet会话API

servlet会话API 您可以使用servlet会话API中定义的类和接口来创建和管理用户会话。servlet会话API提供的用于创建和管理用户会话的各种接口有javax.servlet.http.HttpSession、javax.servlet.httpSessionListener和javax.servlet.http.HttpSessionBindingListener和javax.serv…

FFMPEG推流到B站直播

0、参考 ffmpeg安装参考小弟另外的一个博客&#xff1a;FFmpeg和rtsp服务器搭建视频直播流服务-CSDN博客推流参考&#xff1a;用ffmpeg 做24小时推流直播_哔哩哔哩_bilibili 一、获取b站直播码 点击开始直播后&#xff0c;会出现以下的画面 二、ffmpeg进行直播推流 ffmpeg -r…

通过servlet设计一个博客系统

博客系统 准备工作servlrt依赖mysql依赖jackson依赖 服务器和数据库的交互设计数据库/数据表封装DBUtil,实现建立连接和断开连接创建实体类bloguser 编写Dao类BlogDaoUserDao 前端和服务器的交互功能一:博客列表页约定格式后端代码前端代码 功能二:实现博客详情页约定格式后端代…

STM32外部中断(红外传感器与旋转编码器计数案例)

文章目录 一、介绍部分简介中断系统中断执行流程STM32中断NVIC基本结构NVIC优先级分组外部中断外部中断简介外部中断基本结构外部中断的流程AFIOEXTI框图 相关外设介绍旋转编码器介绍硬件电路对射式红外传感器 二、代码实现对射式红外传感器计次连接电路封装红外传感器与中断函…

【Linux】统信服务器操作系统V20 1060a-AMD64 Vmware安装

目录 ​编辑 一、概述 1.1 简介 1.2 产品特性 1.3 镜像下载 二、虚拟机安装 一、概述 1.1 简介 官网&#xff1a;统信软件 – 打造操作系统创新生态 统信服务器操作系统V20是统信操作系统&#xff08;UOS&#xff09;产品家族中面向服务器端运行环境的&#xff0c;是一款…

mysql升级到8.x

1.下载和安装 1.1.下载 mysql下载地址&#xff1a; https://dev.mysql.com/downloads/mysql/5.5.html?os31&version5.1 应该下载这个类似版本 mysql-8.0.36-linux-glibc2.17-x86_64-minimal.tar.xz 1.2 安装 解压&#xff1a; tar xvf mysql-8.0.36-linux-glibc2.17…

C语言-2

自定义类型 基本认识 /*引入&#xff1a;学生&#xff1a;姓名&#xff0c;学号&#xff0c;年龄&#xff0c;成绩请为学生们专门定制一个类型&#xff08;创造一个类型&#xff09;结构体格式&#xff1a;struct 标识符 // 标识符即自定义类型的名称{成员; // 自己设置…

【洛谷】P2392 kkksc03考前临时抱佛脚

本题最重要的思路是&#xff1a;将题目转化为 01 背包模型。 注意点&#xff1a; &#xff08;1&#xff09;要求最短时间&#xff0c;则需让左右脑花费的时间最接近&#xff0c;极限状态下是左脑时间和右脑时间相等&#xff0c;且等于 m sum / 2&#xff08;其中sum是一道…

如何使用项目管理工具进行任务分配和进度跟踪

项目管理是一项重要的工作&#xff0c;有效的任务分配和进度跟踪是项目成功的关键因素。 项目经理可以选择合适的项目管理工具来管理项目&#xff0c;在选择项目管理工具时&#xff0c;需要根据项目的特点和需求进行评估。本文将介绍如何使用项目管理工具来进行任务分配和进度…

已解决: ModuleNotFoundError: No module named ‘tensorflow‘ 问题

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

【蓝桥杯冲冲冲】[NOIP2001 普及组] 装箱问题

蓝桥杯备赛 | 洛谷做题打卡day26 文章目录 蓝桥杯备赛 | 洛谷做题打卡day26题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示思路 题解代码我的一些话 [NOIP2001 普及组] 装箱问题 题目描述 有一个箱子容量为 V V V&#xff0c;同时有 n n n 个物品&#xff0c;每…

2024年【熔化焊接与热切割】考试题及熔化焊接与热切割操作证考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 熔化焊接与热切割考试题根据新熔化焊接与热切割考试大纲要求&#xff0c;安全生产模拟考试一点通将熔化焊接与热切割模拟考试试题进行汇编&#xff0c;组成一套熔化焊接与热切割全真模拟考试试题&#xff0c;学员可通…