day12|层序遍历合集、226.翻转二叉树、101.对称二叉树

news2024/11/18 14:45:59

目录

层序遍历合集

102.二叉树的层序遍历

107.二叉树的层次遍历II

199.二叉树的右视图

637.二叉树的层平均值

 429.N叉树的层序遍历

515.在每个树行中找最大值

116.填充每个节点的下一个右侧节点指针

117.填充每个节点的下一个右侧节点指针II

104.二叉树的最大深度

111.二叉树的最小深度

226.翻转二叉树

101.对称二叉树


层序遍历合集

 

102.二叉树的层序遍历

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

示例 1:

 

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

输出:[[3],[9,20],[15,7]]

示例 2:

输入:root = [1]

输出:[[1]]

示例 3:

输入:root = []

输出:[]

 问题分析:

借助队列,先把元素加入队列中,如果队列长度>0,就把这个元素加到数组中, 再去判断是否有左右孩子,如果有就依次加入队列中,当第一层的长度减为0时,则进行下一层的遍历。

方法一:BFS

class Solution {
    public List<List<Integer>> resList = new ArrayList<List<Integer>>();
    public List<List<Integer>> levelOrder(TreeNode root) {
        checkFun(root);
        return resList;
    }
    public void checkFun(TreeNode node){
        if(node==null) return;
        Queue<TreeNode> que=new LinkedList<TreeNode>();
        que.offer(node);

        while (!que.isEmpty()){
            List<Integer> itemList=new ArrayList<Integer>();//数组中的小数组,代表着每一层
            int len=que.size();

            while(len>0){
                TreeNode tmpnode=que.poll();
                itemList.add(tmpnode.val);

                if(tmpnode.left!=null) que.offer(tmpnode.left);
                if (tmpnode.right!=null) que.offer(tmpnode.right);
                len--;

            }
            resList.add(itemList);//把每一层数组加到大数组中
        }

    }
}

107.二叉树的层次遍历II

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

示例 1:

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

输出:[[15,7],[9,20],[3]]

示例 2:

输入:root = [1]

输出:[[1]]

示例 3:

输入:root = []

输出:[]

 问题分析:

按照102的从上往下遍历:

借助队列,先把元素加入队列中,如果队列长度>0,就把这个元素移除队列,并加到数组中, 再去判断是否有左右孩子,如果有就依次加入队列中,当第一层的长度减为0时, 则进行下一层的遍历。 

最后把数组反转一下

class Solution {

    public List<List<Integer>> levelOrderBottom(TreeNode root) {
        List<List<Integer>> resList = new ArrayList<List<Integer>>();

        if (root == null) return resList;
        Queue<TreeNode> que = new LinkedList<TreeNode>();
        que.offer(root);
        while (!que.isEmpty()) {
            int len = que.size();
            List<Integer> itemList = new ArrayList<Integer>();
            while (len > 0) {
                TreeNode tmonode = que.poll();
                itemList.add(tmonode.val);
                if (tmonode.left != null) que.offer(tmonode.left);
                if (tmonode.right != null) que.offer(tmonode.right);
                len--;
            }
            resList.add(itemList);
        }
       // List<List<Integer>> result = new ArrayList<>();//用新的大数组存反转后的小数组
       /* for (int i = resList.size() - 1; i >= 0; i--) {//反转操作
            result.add(resList.get(i));
        }*/
      Collections.reverse(resList);
        return resList;
        //retur result;
    }
}

199.二叉树的右视图

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

示例 1:

 

 

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

输出: [1,3,4]

示例 2:

输入: [1,null,3]

输出: [1,3]

示例 3:

输入: []

输出: []

问题分析:

 层序遍历的时候, 判断是否遍历到单层的最后面的元素, 如果是,就放进list数组中。

class Solution {
    public List<Integer> rightSideView(TreeNode root) {
        Queue<TreeNode> qe=new LinkedList<>();
        List<Integer> list=new ArrayList<Integer>();
        if (root==null) return list;

        qe.offer(root);
        while (!qe.isEmpty()){
            int len= qe.size();
          for(int i=0;i<len;i++) {
              TreeNode node = qe.poll();

              if (node.left != null) qe.offer(node.left);
              if (node.right != null) qe.offer(node.right);
                //把right放到left后面目的是让其作为最后面的元素

              if(i==len-1){
                  list.add(node.val);
              }
          }
        }
        return list;
    }
}

 

637.二叉树的层平均值

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

示例 1:

 

输入: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] 。

示例 2:

 

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

输出:[3.00000,14.50000,11.00000]

问题分析:

 本题就是层序遍历的时候把一层求个总和,再取一个均值

class Solution {
    public List<Double> averageOfLevels(TreeNode root) {
        List<Double> list=new ArrayList<>();
        Queue<TreeNode> qe=new LinkedList<>();
        if(root==null) return list;

        qe.offer(root);
        while(!qe.isEmpty()){
            int len= qe.size();
            double sum=0.0;
          for(int i=0;i<len;i++){
                TreeNode node=qe.poll();
                sum=sum+node.val;
                if(node.left!=null) qe.offer(node.left);
                if(node.right!=null) qe.offer(node.right);

            }
            list.add(sum/len);//最好不要对len操作 例如while(len>0)最后len--
        }
        return list;
    }
}

 429.N叉树的层序遍历

515.在每个树行中找最大值

116.填充每个节点的下一个右侧节点指针

117.填充每个节点的下一个右侧节点指针II

104.二叉树的最大深度

111.二叉树的最小深度


 226.翻转二叉树

有一个单链表的 head,我们想删除它其中的一个节点 node

给你一个需要删除的节点 node 。你将 无法访问 第一个节点 head

链表的所有值都是 唯一的,并且保证给定的节点 node 不是链表中的最后一个节点。

删除给定的节点。注意,删除节点并不是指从内存中删除它。这里的意思是:

  • 给定节点的值不应该存在于链表中。
  • 链表中的节点数应该减少 1。
  • node 前面的所有值顺序相同。
  • node 后面的所有值顺序相同。

自定义测试:

  • 对于输入,你应该提供整个链表 head 和要给出的节点 nodenode 不应该是链表的最后一个节点,而应该是链表中的一个实际节点。
  • 我们将构建链表,并将节点传递给你的函数。
  • 输出将是调用你函数后的整个链表。

示例 1:

 

输入:head = [4,5,1,9], node = 5

输出:[4,1,9]

解释:指定链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9

示例 2:

输入:head = [4,5,1,9], node = 1 

输出:[4,5,9] 

解释:指定链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -> 5 -> 9 

AC先欠着


101.对称二叉树

给你一个二叉树的根节点 root , 检查它是否轴对称。

示例 1:

004e002b05a49b96d1dba4121277b47e.jpeg

输入:root = [1,2,2,3,4,4,3] 

输出:true

 

示例 2:

输入:root = [1,2,2,null,3,null,3]

输出:false

AC先欠着

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

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

相关文章

Hi3861鸿蒙物联网项目实战:智慧农业

华清远见FS-Hi3861开发套件&#xff0c;支持HarmonyOS 3.0系统。开发板主控Hi3861芯片内置WiFi功能&#xff0c;开发板板载资源丰富&#xff0c;包括传感器、执行器、NFC、显示屏等&#xff0c;同时还配套丰富的拓展模块。开发板配套丰富的学习资料&#xff0c;包括全套开发教程…

联合体(共用体) :(笔记补充)

目录 一.联合体的基本概念 二.相关面试题 三.联合体大小计算 关于结构体的内存对齐&#xff1a;http://t.csdn.cn/fbQuo 一.联合体的基本概念 联合也是一种特殊的自定义类型,这种类型定义的变量也包含一系列的成员&#xff0c;特征是这些成员公用同一块空间&#xff08;所以…

jar转成dex文件 dex文件转化为smali文件

jar转成dex文件 dx 可以利用android studio中的dx工具。 可以看到android的tool安装位置: 在此路径下的如下目录有dx.bat,这个正是我们需要使用的工具。 D:\sdk\build-tools\30.0.3将dx.bat添加到环境变量 基本指令 > dx --dex --output 输出路径 待转化的jar包C

MySQL通过 XtraBackup 备份恢复单个库

GreatSQL社区原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本&#xff0c;使用上与MySQL一致。作者&#xff1a;王权富贵文章来源&#xff1a;GreatSQL社区原创 1.概述 本文通过 XtraBackup 备份单个数据库&#xff0c;然后…

Elasticsearchdump 数据导入/导出

一.安装过程 当前工具主要是用来对ES中的数据进行数据导入/导出&#xff0c;以及对数据迁移相关&#xff0c;使用elasticdump工具需要使用到npm&#xff0c;所以需要安装相关的依赖 目前使用到的ES版本是7.x 安装NODE 通过npm安装elasticdump # 本地安装和全局安装的区别在于…

3.25 haas506 2.0开发教程-充电电压检测

haas506 2.0开发教程-充电检测1.案例说明2.硬件准备连线3.代码4.测试1.案例说明 可以通过USB端口对连接在开发板上的锂电池进行充电&#xff0c;USB最大供电电压5V。案例使用锂电池供电。通过原理图看到使用ADC2读取锂电池电压&#xff0c;并且采集电压做了分压处理&#xff0…

第六篇 VGGNet——模型精讲

文章目录 1、模型介绍网络结构3 模型特性1、模型介绍 VGGNet是通过简单堆叠卷积构建网络的巅峰之作,在后面的模型就是ResNet这种残差网络的时代。 VGGNet是由牛津大学视觉几何小组(Visual Geometry Group, VGG)提出的一种深层卷积网络结构,他们以7.32%的错误率赢得了201…

为什么我们的微服务中需要网关?

玩过微服务的小伙伴对 Spring Cloud 中的的 Spring Cloud Gateway 多多少少都有一些了解&#xff0c;松哥之前既写过相关的文章&#xff0c;也录过相关的视频跟小伙伴们介绍 Spring Cloud Gateway&#xff0c;不过在之前的介绍中&#xff0c;我可能更加侧重于跟小伙伴们介绍 Sp…

接到新需求时,从何开始设计?

即便我们能够极尽所能把代码写整洁&#xff0c;规避各种坏味道&#xff0c;但我们小心翼翼维护的代码&#xff0c;还是可能因为新的需求被破坏。 新的需求总会在路上&#xff0c;所以&#xff0c;写代码时需要时时刻刻保持嗅觉。 实现驳回 有个功能&#xff0c;内容作品提交…

lxmlxpath一站式教学

文章目录XPath定义XPath 概览安装lxml初步使用xpath 常用表达式获取所有节点获取子节点获取父亲节点属性匹配获取文本获取属性属性多值匹配多属性匹配按序选择节点轴选择总结XPath定义 XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历…

OMNet++安装pydev

菜单栏->Help->Install New SoftWare->Add 输入 Pydev http://pydev.sourceforge.net/pydev_update_site/5.2.0链接为下载5.2.0版本&#xff0c;若jdk<1.8安装5.2.0之前的版本。\color{blue}{链接为下载5.2.0版本&#xff0c;若jdk<1.8安装5.2.0之前的版本。}链…

无代理Bean对象Spring循环依赖处理

Bean A和B互相依赖 A对象或者B对象,创建对象时会形成死循环,解决: Spring中创建对象:实例化、初始化 闭环:此时,图中是一个闭环,如果想解决这个问题,那么就必须要保证不会出现第二次创建A(B)对象这个步骤,也就是说从容器中获取A的时候必须要能够获取到 思考,在spring…

RabbitMQ(三)工作原理及核心概念

目录工作原理图1.Connection 连接2.Channel 信道3.Virtual host 虚拟主机4.Queue 队列5.Exchange 交换机5.1 direct5.2 fanout5.3 topic5.4 headers官网地址&#xff1a;https://www.rabbitmq.com/ 下载地址&#xff1a;https://www.rabbitmq.com/download.html RabbitMQ 的5大…

chk文件恢复和文件恢复的区别有哪些?

文件恢复也就是我们常说的数据恢复&#xff0c;一般用于恢复误删除、损坏的文件数据&#xff0c;那么chk文件恢复又是什么意思呢&#xff1f;两者有什么区别呢&#xff1f;文件恢复市面上常见的文件恢复软件&#xff0c;一般都是用于恢复那些被删除、损坏的文件数据恢复&#x…

Jenkin权限控制——项目矩阵授权策略

开启授权策略 Jenkins的项目权限控制通过【授权策略】实现&#xff0c;【授权策略】需要plugins提供&#xff0c;首先需要安装Role-based Authorization Strategy 安装Role-based Authorization Strategy 管理Jenkins——》插件管理——》搜素——》Role-based Authorizatio…

距离教资考试还有两天,你的照片准备好了没有?

距离教资考试还有两天不知道你的教资报名照准备好了没有?照片不合格可是不能报名成功的&#xff01; ​ ​ 1、本人近6个月以内免冠正面彩色证件照 2、一寸白底&#xff0c;比例3:4 3、不允许戴帽子、头巾、发带、墨镜 4、照片中显示考生头部和肩膀上部 5、照片为jpg或jpe…

云游戏渐入佳境,众玩家同行不同路

配图来自Canva可画 有人曾在2019年问道&#xff1a;“云游戏能成为5G第一个2C的杀手级应用吗&#xff1f;”在当时&#xff0c;几乎所有人对这个问题的回答&#xff0c;都有一种“只缘身在此山中”的迷雾感&#xff0c;还看不清脚下的路会延伸到何处。彼时各大厂商都在备战&am…

MQTT 发布/订阅模式介绍

MQTT 发布/订阅模式 发布订阅模式&#xff08;Publish-Subscribe Pattern&#xff09;是一种消息传递模式&#xff0c;它将发送消息的客户端&#xff08;发布者&#xff09;与接收消息的客户端&#xff08;订阅者&#xff09;解耦&#xff0c;使得两者不需要建立直接的联系也不…

向量检索服务迭代演进

背景在搜索推荐系统里&#xff0c;有一个重要的服务是向量检索服务&#xff0c;也就是求向量在空间中最相近的topk个向量&#xff0c;在搜索系统里&#xff0c;涉及大量的召回引擎可能需要用到向量检索服务&#xff0c;需要在线实时计算&#xff0c;并且可快速响应&#xff1b;…

Jetpack Compose中的startActivityForResult的正确姿势

之前在 Jetpack Compose中的导航路由 里简单的提到了从 Compose 导航到其他 Activity 页面的方式&#xff0c;对于不带返回结果的则就是跟以前一样简单的启动Activity的代码&#xff0c;而如果是startActivityForResult方式的&#xff0c;需要使用带回调的方式去启动&#xff0…