【算法刷题 | 二叉树 02】3.21 二叉树的层序遍历01(5题:二叉树的层序遍历、层序遍历||、右视图、层平均值,以及N叉树的层序遍历)

文章目录

  • 5.二叉树的层序遍历
    • 5.1 102_二叉树的层序遍历
      • 5.1.1问题
      • 5.1.2解法:队列
    • 5.2 107_二叉树的层序遍历||
      • 5.2.1问题
      • 5.2.2解法:队列
    • 5.3 199_二叉树的右视图
      • 5.3.1问题
      • 5.3.2解决:队列
    • 5.4 637_二叉树的层平均值
      • 5.4.1问题
      • 5.4.2解决:队列
    • 5.5 429_N叉树的层序遍历
      • 5.5.1问题
      • 5.5.2解法:层序遍历+栈

5.二叉树的层序遍历

5.1 102_二叉树的层序遍历

5.1.1问题

给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。

102.二叉树的层序遍历

5.1.2解法:队列

  1. 层序遍历需要借用一个辅助数据结构,即 队列 来实现
  2. 队列先进先出,符合一层一层遍历的逻辑
  3. 首先将根节点添加到队列中,接着开启一个循环(只要队列不为空,就一直循环)
    1. 在每次循环中,先拿到此时队列的长度
    2. 接着依次取出此时队列的全部节点(先进先出),并处理该元素
    3. 若该节点的左孩子不为空,则添加进队列;若该节点的右孩子不为空,则添加进队列
    4. 每次循环中,将处理完的list数组添加到返回值即可

102二叉树的层序遍历

class Solution {public List<List<Integer>> levelOrder(TreeNode root) {//1、借助队列实现:先进先出Queue<TreeNode> queue=new LinkedList<>();List<List<Integer>> list=new ArrayList<>();if(root==null){return list;}//添加根节点到队列queue.offer(root);while(!queue.isEmpty()){//只要队列不为空,就一直循环List<Integer> tmp=new ArrayList<>();//取出队列全部元素int len=queue.size();while(len>0){TreeNode node=queue.poll();//添加值tmp.add(node.val);                                 if(node.left!=null){queue.offer(node.left);}if(node.right!=null){queue.offer(node.right);}len--;}list.add(tmp);}return list;}
}

5.2 107_二叉树的层序遍历||

5.2.1问题

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

107.二叉树的层次遍历II

5.2.2解法:队列

  1. 思路:跟上一题一样,使用队列解决
  2. 由于是自底向上,所以结果反转list即可
class Solution {public List<List<Integer>> levelOrderBottom(TreeNode root) {Queue<TreeNode> queue=new LinkedList<>();List<List<Integer>> list=new ArrayList<>();if(root==null){return list;}queue.offer(root);while(!queue.isEmpty()){//遍历该层List<Integer> tmp=new ArrayList<>();int len=queue.size();while(len>0){TreeNode node=queue.poll();tmp.add(node.val);if(node.left!=null){queue.offer(node.left);}if(node.right!=null){queue.offer(node.right);}len--;}//将该层结果添加到返回list中list.add(tmp);}//反转,也可以新建一个list,从后往前遍历原来的listCollections.reverse(list);return list;}
}

5.3 199_二叉树的右视图

5.3.1问题

给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

  • 示例一:

img

输入: [1,2,3,null,5,null,4]
输出: [1,3,4]

5.3.2解决:队列

  1. 思路:层序遍历,将每层的最右节点添加到返回list中即可
class Solution {public List<Integer> rightSideView(TreeNode root) {Queue<TreeNode> queue=new LinkedList<>();List<Integer> list=new ArrayList<>();if(root==null){return list;}queue.offer(root);while(!queue.isEmpty()){int len=queue.size();for(int i=0;i<len;i++){TreeNode node=queue.poll();if(i==len-1){//每层的最后一个list.add(node.val);}if(node.left!=null){queue.offer(node.left);}if(node.right!=null){queue.offer(node.right);}}}return list;}
}

5.4 637_二叉树的层平均值

5.4.1问题

给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。

  • 示例一:

img

输入:root = [3,9,20,null,null,15,7]
输出:[3.00000,14.50000,11.00000]
解释:第 0 层的平均值为 3,第 1 层的平均值为 14.5,第 2 层的平均值为 11 。
因此返回 [3, 14.5, 11] 。

5.4.2解决:队列

class Solution {public List<Double> averageOfLevels(TreeNode root) {Queue<TreeNode> queue=new LinkedList<>();List<Double> list=new ArrayList<>();if(root==null){return list;}queue.offer(root);while(!queue.isEmpty()){//遍历该层int len=queue.size();Double tmp=0.0;for(int i=0;i<len;i++){TreeNode node=queue.poll();tmp+=node.val;if(node.left!=null){queue.offer(node.left);}if(node.right!=null){queue.offer(node.right);}}//将该层结果添加到返回list中list.add(tmp/len);}return list;}
}

5.5 429_N叉树的层序遍历

5.5.1问题

给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。

树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。

  • 示例一:

img

输入:root = [1,null,3,2,4,null,5,6]
输出:[[1],[3,2,4],[5,6]]

5.5.2解法:层序遍历+栈

class Solution {public List<List<Integer>> levelOrder(Node root) {Queue<Node> queue=new LinkedList<>();List<List<Integer>> list=new ArrayList<>();if(root==null){return list;} queue.offer(root);while(!queue.isEmpty()){int len=queue.size();List<Integer> tmp=new ArrayList<>();while(len>0){Node node=queue.poll();tmp.add(node.val);//由左右节点变成孩子节点List<Node> childrens=node.children;for(Node children:childrens){if(children!=null){queue.offer(children);}}len--;}list.add(tmp);}return list;}
}

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

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

相关文章

.NET Core 服务实现监控可观测性最佳实践

前言 本次实践主要是介绍 .Net Core 服务通过无侵入的方式接入观测云进行全面的可观测。 环境信息 系统环境&#xff1a;Kubernetes编程语言&#xff1a;.NET Core ≥ 2.1日志框架&#xff1a;Serilog探针类型&#xff1a;ddtrace 接入方案 准备工作 DataKit 部署 DataK…

4核16G服务器租用优惠价格,26.52元1个月,半年149元

阿里云4核16G服务器优惠价格26.52元1个月、79.56元3个月、149.00元半年&#xff0c;配置为阿里云服务器ECS经济型e实例ecs.e-c1m4.xlarge&#xff0c;4核16G、按固定带宽 10Mbs、100GB ESSD Entry系统盘&#xff0c;活动链接 aliyunfuwuqi.com/go/aliyun 活动链接打开如下图&a…

ZHUTI主提2024夏季系列 —「逐·行」

ZHUTI主提全新发布2024夏季「逐行」系列&#xff0c;聚焦当下人与自然的关系&#xff0c;以衣为载体&#xff0c;秉承东方哲学的艺术理念&#xff0c;将美学艺术与主流时尚设计融合&#xff0c;赋予当代时装表达新方向&#xff0c;共创现代女性之美。 取自然之意境&#xff0c…

list.sort()Collections.sort()深入理解

list.sort()&&Collections.sort() 文章目录 list.sort()&&Collections.sort()背景相关代码代码一代码二 原理举一反三 业务场景考虑 背景 业务中经常用到List的sort()方法&#xff0c;但是对于其中return的-1&#xff0c;0&#xff0c;1理解不到位&#xff0c…

蓝桥杯 2022 省B 李白打酒加强版

这题用递归暴力的方法如下&#xff1a; #include<iostream> #include<bits/stdc.h> using namespace std; int num; int N,M; void dfs(int now,int n,int m) {if(now<0 || n>N ||m>M)return ;if(nN && mM){if(now1)num1;return;}dfs(now-1,n,m1…

微服务day05(下) -- ES文档操作 + RestApi + RestClient操作文档

3.1.新增文档 语法&#xff1a; POST /索引库名/_doc/文档id {"字段1": "值1","字段2": "值2","字段3": {"子属性1": "值3","子属性2": "值4"},// ... } 示例&#xff1a; # 插…

内网使用rustdesk进行远程协助

文章目录 前言一、搭建rustdesk中继服务器二、搭建文件下载服务器三、创建引导脚本四、使用 前言 内网没有互联网环境&#xff0c;没法使用互联网上有中继服务器的远程协助工具&#xff0c;如teamviewer、todesk、向日癸等&#xff1b;在内网进行远程维护可以自己搭建中继服务…

网络基础「HTTP」

&#x1f52d;个人主页&#xff1a; 北 海 &#x1f6dc;所属专栏&#xff1a; Linux学习之旅、神奇的网络世界 &#x1f4bb;操作环境&#xff1a; CentOS 7.6 阿里云远程服务器 文章目录 1.再谈协议1.1.认识URL1.2.Encode 和 Decode 2.HTTP 协议2.1.协议格式2.2.见一见请求2.…

OpenAI GPT商店面临质量与合规问题;黄仁勋预测:十年内AI将实时生成游戏画面

&#x1f989; AI新闻 &#x1f680; OpenAI GPT商店面临质量与合规问题 摘要&#xff1a;OpenAI旗下的GPT商店因存在大量涉嫌侵权内容、助长学术不诚实行为及违规内容等问题而引起关注。其中包括未经授权使用迪士尼、漫威角色生成内容的GPT模型&#xff0c;以及声称能绕过剽…

HCIP的学习(3)

网络类型及数据链路层协议 网络类型分类 P2P网络----点到点网络类型MA网络-----多点接入网络 BMA----广播型多点接入网络NBMA—非广播型多点接入网络&#xff08;快淘汰了&#xff09; 数据链路层协议 MA网络 以太网协议 特点&#xff1a;需要使用MAC地址对设备进行区分…

Java安全 反序列化(5) CC6链原理分析

Java安全 反序列化(5) CC6链原理分析 CC6学习的目的在于其可以无视jdk版本&#xff0c;这条链子更像CC1-LazyMap和URLDNS链子的缝合版 文章目录 Java安全 反序列化(5) CC6链原理分析前言一.CC6的原理和实现以及易错点我们如何实现调用LazyMap.get()方法一个易错点 二.完整CC6P…

【超全详解】Maven工程配置与常见问题解决指南

Maven工程 目录 Maven工程一、如何检查Maven工程是否配置正确&#xff1f;1、检查路径2、检查基本配置3、其他配置 二、Maven的基本操作基本操作install和package的区别 三、获取别人的Maven工程之后如何修改&#xff1f;四、如何正确写好配置文件&#xff1f;1.寻找配置资源2.…

Gitlab的流水线任务【实现每小时自动测试 dev分支的更新】

背景 在现代软件开发实践中&#xff0c;持续集成&#xff08;Continuous Integration, CI&#xff09;是确保代码质量和快速响应软件缺陷的关键策略。GitLab 提供了强大的 CI/CD 功能&#xff0c;允许开发者自动化测试和部署流程。本文将介绍如何设置 GitLab 流水线计划任务&a…

Java22重磅发布!!!!卷不动了,真的卷不动了。。。。

就在3月19日&#xff0c;Java22重磅发布。Java22新增了12项增强功能&#xff0c;其中包括七个预览特性和一个孵化器特性&#xff0c;这些功能都显著到足以引起JDK增强提案&#xff08;JEPs&#xff09;的关注。它们涵盖了Java语言、其API、性能以及JDK中包含的工具的改进。 真…

【网络基础】VRRP虚拟路由冗余协议介绍与配置

目录 一、VRRP的概述 1.1 VRRP的由来 1.2 作用 1.3 基本结构 1.4 状态机流程 1.5 设备类型 二、 实例演示 一、VRRP的概述 1.1 VRRP的由来 局域网中的用户终端通常采用配置一个默认网关的形式访问外部网络&#xff0c;如果此时默认网关设备发生故障&#xff0c;将中断…

设计模式 --4:工厂方法模式

总结 &#xff1a; 个人理解&#xff1a; 工厂方法模式就是在简单工程模式的基础下将工厂类抽象出来。如果不抽象工厂类 &#xff0c;每一次创建一个新的算法&#xff0c;都要修改原来的工厂类&#xff0c;这不符合 开放–封闭原则 将工厂类给抽象出来&#xff0c;让具体的算法…

使用zabbix自动发现规则监控oracle分区表的分区键的合法

一、 创建从数据库查询原始数据脚本 编写脚本query_table.sh vim query_table.sh #!/bin/bash temp_outfile"/tmp/table.source" outfile"/tmp/table.txt" source /home/oracle/.bash_profilesqlplus -s zabbix/zabbix>${temp_outfile}<<EOF c…

贪心算法入门

简介 贪心算法&#xff08;Greedy Algorithm&#xff09;是一种在每一步选择中都采取在当前状态下最好或最优&#xff08;即最有利&#xff09;的选择&#xff0c;从而希望导致结果是全局最好或最优的算法。也就是首先选取局部最优&#xff0c;从局部最优推出全局最优。 举例…

【python开发】安装配置启动+数据库管理+表管理+数据行管理+python操作Mysql及相关安全的问题

Mysql入门 一、安装&启动1、安装2、测试3、设置和修改root密码 二、数据库管理1、内置客户端操作&#xff08;1&#xff09;查看当前所有的数据库(show databases);&#xff08;2&#xff09;创建数据库&#xff1a;create database learn&#xff08;数据库名&#xff09;…

北京中科富海低温科技有限公司确认出席2024第三届中国氢能国际峰会

会议背景 随着全球对清洁能源的迫切需求&#xff0c;氢能能源转型、工业应用、交通运输等方面具有广阔前景&#xff0c;氢能也成为应对气候变化的重要解决方案。根据德勤的报告显示&#xff0c;到2050年&#xff0c;绿色氢能将有1.4万亿美元市场。氢能产业的各环节的关键技术突…