LeetCode题解13 (102,226) 二叉树的层序遍历,翻转二叉树

news2024/11/28 14:41:31

文章目录

    • 二叉树的层序遍历(102)
      • 代码解答:
    • 翻转二叉树(226)
      • 代码解答:

二叉树的层序遍历(102)

在这里插入图片描述
思路(前序,后序,中序遍历):
二叉树的层序遍历不同于二叉树的前序,后序,中序遍历,层序遍历是将二叉树的每一层从根部开始进行遍历,
将每一层的节点都放到1个集合中,

        //先创建1个队列来表示每层的TreeNode
        Queue<TreeNode> queue = new LinkedList<>();

最后再用1个大集合将所有层的节点情况全部收集起来。

        //统计所有层数的集合
        List<List<Integer>> arr = new ArrayList<List<Integer>>();

这里使用到了2个队列

因此我们这里使用队列,先将根节点加入到队列a中

        //先将根节点root加进去
        queue.add(root);

再创建1个b队列,接着弹出根节点到b队列中的同时在判断根节点是否有左子节点和右子节点,若有的话就将左子节点和右子节点都加入到a队列中

 while(!queue.isEmpty()){
            //获取当前层的个数
            int size = queue.size();
          //先new1个ArrayList来接收
           List<Integer> list = new ArrayList<>();
           //遍历当前层
            for(int i = 0;i<size;i++){
                //将当前的节点取出
                TreeNode node = queue.poll();
                list.add(node.val);
                if(node.left != null){
                    queue.add(node.left);
                }
                if(node.right != null){
                    queue.add(node.right);
                }
            }
            arr.add(list);
        }

我们接着创建1个集合去接收每一层的节点数,再将该集合放入到1个统计所有层节点的集合中去,只要队列不为Null接着继续重复该操作。

代码解答:

class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        //先创建1个队列来表示每层的TreeNode
        Queue<TreeNode> queue = new LinkedList<>();
        //统计所有层数的集合
        List<List<Integer>> arr = new ArrayList<List<Integer>>();
        if(root == null){
            return new ArrayList<>();
        }
        //先将根节点root加进去
        queue.add(root);
        //只要当前的队列不为null
        while(!queue.isEmpty()){
            //获取当前层的个数
            int size = queue.size();
          //先new1个ArrayList来接收
           List<Integer> list = new ArrayList<>();
           //遍历当前层
            for(int i = 0;i<size;i++){
                //将当前的节点取出
                TreeNode node = queue.poll();
                list.add(node.val);
                if(node.left != null){
                    queue.add(node.left);
                }
                if(node.right != null){
                    queue.add(node.right);
                }
            }
            arr.add(list);
        }
        return arr;
    }
}

翻转二叉树(226)

在这里插入图片描述
这道题的翻转是除了根节点,左子树和右子树都要翻转,因此我们不需要考虑根节点,只考虑左右子树即可,
在解决这道题之前我们先来回顾一下怎么交换2个数的值

int a = 1;
int b = 2;
//先定义1个temp作为交换的介质
int temp = 0;
temp = a;
a = b;
b = temp;

这道题也是如此,我们需要定义1个临时的树去存储左子树,再进行交换

//先创建1个临时的树去存储临时的左子树
        TreeNode tempTree = root.left;
        //递归到最后
        root.left = root.right;
        root.right = tempTree;

显然我们只这样做是不行的,我们所得到树最后1层并没有彻底交换,因此我们遇到树的问题就要考虑递归,
//先创建1个临时的树去存储临时的左子树

TreeNode tempTree = invertTree(root.left);
//递归到最后
root.left = invertTree(root.right);
root.right = tempTree;

这样就解决了

代码解答:

class Solution {
    public TreeNode invertTree(TreeNode root) {
     if(root == null){
         return root;
     }
        //先创建1个临时的树去存储临时的左子树
        TreeNode tempTree = invertTree(root.left);
        //递归到最后
        root.left = invertTree(root.right);
        root.right = tempTree;
        return root;
    }
}

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

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

相关文章

推断统计 | 学习笔记

一.概率与概率分布 概率论&#xff1a;为解决不确定性问题提供方法 1.随机事件及其概率 基本概念 试验&#xff1a;在相同条件下&#xff0c;对事物或现象所进行的观察。特点是可以在相同的条件下重复进行&#xff1b;每次试验的可能结果不止一个&#xff0c;但试验的所有可…

l2a股接口的委托队列有什么作用?

l2a股接口的委托队列是Level 2行情特有的功能&#xff0c;如下图&#xff0c;在传统交易页面中&#xff0c;可以看到个股封板涨停有35994手&#xff0c;但是不能具体看到各笔委托单的数量&#xff0c;不利于我们甄别究竟是主力在强势封板还是散户在跟风。 而在Level 2行情中可以…

高性能、强稳定的工业级服务器冗余方案是怎样的?

前言 服务器是工业数据采集与上位机进行通信的枢纽&#xff0c;一旦遭到攻击或者出现连接不稳定的情况&#xff0c;导致断开连接&#xff0c;工厂就会出现非计划性的停机停产。这种情况带来的损失是难以估量的。因此&#xff0c;为了保障自动化生产的稳定可控&#xff0c;服务…

关于Detectron库预训练模型的权重转换

关于Detectron库预训练模型的权重转换 最近在调试代码的过程中涉及到detectron库的使用&#xff0c;在模型训练前&#xff0c;主干网络的部分需要加载预训练模型&#xff0c;但是原始的预训练模型在detron库中的代码是不能直接使用的&#xff0c;需要通过转换工具对模型的键值…

Sentinel服务熔断降级

除了流量控制以外&#xff0c;对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。一个服务常常会调用别的模块&#xff0c;可能是另外的一个远程服务、数据库&#xff0c;或者第三方 API 等。例如&#xff0c;支付的时候&#xff0c;可能需要远程调用银联提供…

Redis Lua脚本 Debug

Redis 编程接口之Lua脚本 Redis 使用Lua脚本和Redis Functions扩展其功能。Redis提供编程接口&#xff0c;允许开发者在服务器执行自定义的脚本&#xff0c;对于不同的版本&#xff0c;实现的方式略有不同 Redis 7 及以上版本 使用Redis Functions 管理、运行脚本Redis 6.2及…

【20天快速掌握Python】day02-数据类型转换及运算符

1、数据类型转换 函数说明int(x [,base ])将x转换为一个整数float(x)将x转换为一个浮点数str(x)将对象 x 转换为字符串bool(x)将对象x转换成为布尔值转换成为整数 print(int("123")) # 123 将字符串转换成为整数 print(int(123.78)) # 123 将浮点数转换成为整数 …

腾讯云存储产品全线升级,满足更多高性能存储场景

数字经济时代&#xff0c;诞生了海量数据资源&#xff0c;促使数据存储技术也在不断推陈出新。12月1日&#xff0c;在2022腾讯全球数字生态大会存储专场上&#xff0c;腾讯云发布了多款云存储产品能力上新&#xff0c;并对分布式存储、高性能存储、日志大数据、云原生数据湖等产…

CMSIS hal库 标准库 pack(芯片支持包)

ARM Cortex™ 微控制器软件接口标准(CMSIS&#xff1a;Cortex Microcontroller Software Interface Standard) 是 Cortex-M 处理器系列的与供应商无关的硬件抽象层 CMSIS英文全称Common Microcontroller Software Interface Standard&#xff0c;☞通用微控制器软件接口标准&a…

OAuth2.0介绍

1. OAuth2.0介绍 OAuth&#xff08;开放授权&#xff09;是一个开放标准&#xff0c;允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息&#xff0c;而不需要将用户名和密码提供给第三方应用或分享他们数据的所有内容。OAuth2.0是OAuth协议的延续版本&#xff0…

【蓝桥杯选拔赛真题51】Scratch赛车训练 少儿编程scratch图形化编程 蓝桥杯选拔赛真题讲解

目录 scratch赛车训练 一、题目要求 编程实现 二、案例分析 1、角色分析

python解决 某文库禁用文段批量下载 并保存到文档

嗨害大家好鸭&#xff01; 我是小熊猫鸭~ 大家是不是在写毕业论文的时候 需要参考某一段的内容 要用到复制粘贴&#xff0c;但是吧&#xff0c;某文库就需要付费&#xff0c; 就老难受了… 我们今天就来解决这个"老难受" 源码、资料点击此处 环境使用&#xff1…

项目实战案例丨教辅机构信息化平台跟着这个做

一. 基本简介 最近正值计算机专业的小伙伴忙着整理毕业设计&#xff0c;有不少童靴问辉哥&#xff0c;有没有合适的项目作为毕业设计项目。恰好辉哥这里就有一个适合作为毕设的项目&#xff0c;那么辉哥就写一篇文章&#xff0c;聊聊这个项目&#xff0c;希望可以对有需要的你…

照片怎么制作动态照片?这篇文章教会你如何制作

大家不知道有没有在网上刷到过一些本来是静态的照片&#xff0c;可照片里的局部却能够动起来的动态图片&#xff0c;我看完后觉得这种特效很神奇&#xff0c;既有趣又不会有违和感。那你想知道动态照片怎么制作吗&#xff1f;今天我就来给大家介绍一下制作动态图片的具体方法&a…

基于JWT用户认证分析

在前后端分离开发时为什么需要用户认证呢&#xff1f;原因是由于HTTP协定是不储存状态的(stateless)&#xff0c;这意味着当我们透过帐号密码验证一个使用者时&#xff0c;当下一个request请求时它就把刚刚的资料忘了。 于是我们的程序就不知道谁是谁&#xff0c;就要再验证一…

Spring Security 认证授权(一)

1.基本概念1.1.什么是认证 进入移动互联网时代&#xff0c;大家每天都在刷手机&#xff0c;常用的软件有微信、支付宝、头条等&#xff0c;下边拿微信来举例子说明认证相关的基本概念&#xff0c;在初次使用微信前需要注册成为微信用户&#xff0c;然后输入账号和密码即可登录微…

大二毕设.1-学生信息管理系统

目录 技术选型: 功能概括: 可扩展性良好&#xff0c;添加其余操作无非是多加点信息&#xff0c;重复编码改数据罢 版本: 基本演示 功能实现讲解 登录校验 可调整每页条数的分页显示与增删查改 不会造成偷窃的部分web代码 技术选型: 前端: Vue Element UI后端: Spring…

喜报|众享链网荣获第二届中国可信区块链安全攻防大赛优秀案例奖

近日&#xff0c;第二届中国可信区块链安全攻防大赛决赛在成都成功举办并圆满落幕。经过预赛初审、预赛复审的层层选拔&#xff0c;众享链网脱颖而出&#xff0c;成功进入赛道三“原创自主区块链平台优秀应用案例评选比赛”总决赛环节&#xff0c;荣获优秀案例奖&#xff0c;入…

[附源码]计算机毕业设计的桌游信息管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis MavenVue等等组成&#xff0c;B/S模式…

弗洛伊德算法(Floyd)的实现与可视化其最短路径

弗洛伊德算法Floyd是针对多源路径找出最短的路径&#xff0c;其中数据结构会使用到前面介绍过的邻接矩阵&#xff0c;有兴趣的可以先查阅&#xff1a;图数据结构之邻接矩阵Adjacency Matrix(Python版) 先了解这个邻接矩阵然后再回看本文章也可以。 区别在于这里我们介绍的是带…