代码随想录算法训练营第十五天字符串 java : 层序遍历 226.翻转二叉树 101. 对称二叉树

news2025/1/12 12:10:33

文章目录

  • 前言
  • Leetcode 102 二叉树的层序遍历
    • 题目讲解
  • Leetcode 226.翻转二叉树
    • 题目讲解
  • Leetcode 101. 对称二叉树
    • 题目讲解
    • 递归法
  • 总结


前言

递归三定律

  • 确定参数和返回值
  • 确认终止条件
  • 确认单层递归的逻辑

Leetcode 102 二叉树的层序遍历

题目讲解

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<List<Integer>> reslist = new ArrayList< List< Integer>>  (); 
    public List<List<Integer>> levelOrder(TreeNode root) {
           check02(root);
           return reslist;
    }
    public void check02(TreeNode node)
    {
        Queue <TreeNode>  que =new LinkedList<TreeNode>();
        if( node == null)
        {
            return;

        }
        que.offer(node);
        while(!que.isEmpty())
        {   List<Integer> ItemList = new ArrayList<Integer>();  //一维
             int len =que.size();   
             while(len>0)
             {
                 TreeNode tempnode=  que.poll();
                 ItemList.add(tempnode.val);  //获取相应的值

                 //也差不多可以理解理解为下一层的值放到队列里
                 if(tempnode.left!=null)
                 {
                     que.offer(tempnode.left);
                 }
                 if(tempnode.right!=null)
                 {
                     que.offer(tempnode.right);
                 } 
                 len--;   //次数减一
             
            }
          //在统一放到二维数组里
            reslist.add( ItemList);

        }
        
        
        

    }
}

Leetcode 226.翻转二叉树

题目讲解

在这里插入图片描述

交换每一个节点的左右孩子, 确定使用后续遍历

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode invertTree(TreeNode root) {
          if( root ==null)
          {
              return null;
          }

          //左
           
          invertTree( root.left);

          // 右
          invertTree(root.right);

          //中

          swapChildern(root);
          
          return root;

          
    }
     public void swapChildern(TreeNode root)
          {
               TreeNode tempnode = root.left;
               root.left =root.right;
               root.right =tempnode;
          }
}

Leetcode 101. 对称二叉树

(优先掌握递归)

题目讲解

在这里插入图片描述

递归法

递归三部曲

  • 1 确认递归函数的参数和返回值
    参数是左子树节点 和右子树节点因为要判断两个节点是否翻转来判断这个树对称不
    返回类型为bool
    2 确认终止条件
    在这里插入图片描述
    如果左右节点都不为空,比较节点数值,不相同就return false;

这道题只能使用后序遍历,左右孩子分别处理完之后 才能返回给根节点,下面是AC代码

AC代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public boolean isSymmetric(TreeNode root) {
      return compare(root.left,root.right);
      
    }
    public boolean compare( TreeNode left,TreeNode right)
    {
        if( left==null&& right!=null ) 
        {
            return false;
        }
        if( left!=null && right==null)
        {
            return false;
        }
        if( left==null && right ==null)
        {
            return true;
        }
        if(left.val!= right.val)
        {
            return false;
        }


      boolean compareOutSide = compare(left.left,right.right);
      boolean compareInSide = compare(left.right,right.left);
      return compareInSide&& compareOutSide;
    }
}

总结

翻转二叉树的整体思路可以看图
在这里插入图片描述
自己做的图加深一下理解
在这里插入图片描述
困死了准备休息

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

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

相关文章

大批量数据需要导出导入时,使用mysql 快速导出和导入 csv

使用MYSQL命令行模式 导出into outfile 导入load data导出 into outfile&#xff1a;mysql> select * from cdkeyduihuan into outfile d:/cdk.csv FIELDS TERMINATED BY ,;Query OK, 1049990 rows affected (1.16 sec)d:/cdk.csv 导出数据保持的文件目录。FIELDS TERMINATE…

windows ngnix 配置https

因为客户需求&#xff0c;需要把原来的http换成https&#xff0c;还不能影像原来http的访问。 看了许多网上的资料&#xff0c;经过实践。我总结下相关步骤及怎么配置的。 第一步&#xff0c;把http换成https这里需要ssl证书 ssl证书生成&#xff0c;我接触的有2种免费方式。…

Kettle的安装以及简单使用

Kettle是一款开源免费的ETL工具&#xff0c;ETL全称 Extract - Transform - Load 意味着数据抽取&#xff0c;转换&#xff0c;装载的过程。 ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程&#xff0c;目的是将企业中的分散、零乱、标准不统一的数据整合到…

二叉树19:最大二叉树

主要是我自己刷题的一些记录过程。如果有错可以指出哦&#xff0c;大家一起进步。 转载代码随想录 原文链接&#xff1a; 代码随想录 leetcode链接&#xff1a;654. 最大二叉树 题目&#xff1a; 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地…

【ElementUI】一.axios拦截器;二.ElementUI

目录 一.axios拦截器 1.axios模块的作用&#xff1a;是对基于http请求的封装。在浏览器端对异步请求对象XMLHttpRequest进行封装 2.拦截器&#xff1a; &#xff08;1&#xff09;请求拦截器&#xff1a;对客户端发起的请求进行统一的前期处理&#xff08;token、时间戳、co…

分支与循环语句 - 练习题

目录 一、分支语句 1. 判断一个数是否为奇数 2. 输出1-100之间的奇数 法1&#xff1a;遍历1-100所有的数字&#xff0c;判断是否为奇数&#xff0c;再输出 法2&#xff1a;奇数从1开始&#xff0c;等差为2&#xff0c;所以循环2 二、循环语句 1. 计算 n的阶乘。 2. 计算…

ArcGIS基础实验操作100例--实验84查找面到直线的最近点位置

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 高级编辑篇--实验84 查找面到直线的最近点位置 目录 一、实验背景 二、实验数据 三、实验步骤 &#…

Acwing---1015.摘花生

摘花生1.题目2.基本思想3.代码实现1.题目 Hello Kitty想摘点花生送给她喜欢的米老鼠。 她来到一片有网格状道路的矩形花生地(如下图)&#xff0c;从西北角进去&#xff0c;东南角出来。 地里每个道路的交叉点上都有种着一株花生苗&#xff0c;上面有若干颗花生&#xff0c;经…

Hudi集成Spark(二)Spark SQL方式

文章目录环境准备创建表插入数据查询数据更新数据删除数据覆盖数据修改表结构&#xff08;Alter Table&#xff09;修改分区存储过程&#xff08;Procedures&#xff09;Catalog&#xff1a;可以和Spark或者Flink中做一个共享&#xff0c;共享之后&#xff0c;计算引擎才可以去…

跨域与Nginx总结

跨源资源共享&#xff08;CORS&#xff09;是一种机制&#xff0c;他使浏览器可以访问由其他域提供的Web资源。通常&#xff0c;浏览器会使用同源策略来限制从脚本中发出的HTTP请求。例如&#xff0c;如果一个网站的资源位于https://haha.com&#xff0c;那么它就不能发出对htt…

使用ResNet50实现CIFAR10数据集的训练

如果对你有用的话&#xff0c;希望能够点赞支持一下&#xff0c;这样我就能有更多的动力更新更多的学习笔记了。&#x1f604;&#x1f604; 使用ResNet进行CIFAR-10数据集进行测试&#xff0c;这里使用的是将CIFAR-10数据集的分辨率扩大到32X32&#xff0c;因为算力相关的…

C语言常用内存函数的深度解析

文章目录前言memcpymemcpy函数的使用memcpy函数的自我实现memmovememmove函数的使用memmove函数的自我实现memcmpmemcmp函数的使用memcmp函数的自我实现memsetmemset函数的使用memset函数的自我实现写在最后前言 内存函数的使用广泛度大于常用字符串函数的使用广泛度&#xff0…

教程- VTK.js的基本介绍

VTK.js的核心是标准可视化工具包(VTK)库的JavaScript移植&#xff0c;这是一个c库&#xff0c;旨在促进数据可视化&#xff0c;在此基础上构建了科学可视化应用程序Paraview。VTK.js没有使用OpenGL&#xff0c;而是利用WebGL&#xff0c;主要关注几何和体渲染。因此&#xff0c…

JavaFx程序使用Gloun打包成Android平台App教程

0. 提要 !!! 适合有Maven基础&#xff0c;对JavaFx或JavaFX移动端感兴趣的朋友 提示必须在Linux环境下进行&#xff0c;可以使用虚拟机 推荐使用CentOS系统进行,虚拟机硬盘大小推荐最少给30G 不要像我一样,搞一半又去给文件系统根目录扩大容量 如果容量不够可以看篇博客: http…

C++模板(第二版)笔记之第十八章:模板的多态性

文章目录一、动态多态&#xff08;dynamic polymorphism&#xff09;二、静态多态三、静态多态VS动态多态1.术语2.优点和缺点3.结合两种多态形式&#xff1a;CRTP四、使用concepts五、新形势的设计模式六、泛型编程七、总结一、动态多态&#xff08;dynamic polymorphism&#…

【C语言】内存函数介绍

它们所在的头文件&#xff1a; &#xff08;这里出现的arr都为char类型数组&#xff09;strlen作用&#xff1a;计算一个字符串的长度本质&#xff1a;历经千辛找一个 \0 &#xff0c;找到 \0 就立马停止。&#xff08;就是找 \0 &#xff09;易错&#xff1a;strlen 返回值为 …

物联网无线通信技术中蓝牙和WIFI有哪些区别?

在物联网快速发展的时代&#xff0c;联网运行的设备越来越多&#xff0c;无线通信技术在物联网中发挥着举足轻重的作用&#xff0c;无线通信技术的发展改变了信息传输的方式&#xff0c;人们在任何时间、任何地点都可以访问设备&#xff0c;目前最常用的两种无线通信技术分别是…

云服务器CentOS前后端部署流程记录

部署流程记录 购买云服务ecs服务器&#xff0c;建立CentOS系统 通过xftpxshell访问远程服务 doker部署&#xff08;https://www.runoob.com/docker/centos-docker-install.html&#xff09; docker docker部署环境&#xff08;mysql&#xff09; docker常用命令 1. docker i…

【Linux】进程状态与优先级

文章目录进程状态概念Linux中的进程状态R(running)状态S(sleeping)状态D(disk sleep)状态T(stopped)状态t(tracing stop)状态X(dead)状态Z(zombie)状态特殊的孤儿进程进程优先级进程性质补充进程状态概念 《现代操作系统》中给出的进程状态的定义如下&#xff1a; 进程状态反映…

Qt+C++窗体界面中英文多语言切换

程序示例精选 QtC窗体界面中英文语言切换 如需安装运行环境或远程调试&#xff0c;见文章底部个人微信名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<QtC窗体界面中英文语言切换>>编写代码&#xff0c;代码整洁&#xff0c;规则&#x…