leetcode 226. Invert Binary Tree 翻转二叉树(简单)

一、题目大意

给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。

示例 1:

leetcode 226. Invert Binary Tree 翻转二叉树(简单)

输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]

示例 2:

leetcode 226. Invert Binary Tree 翻转二叉树(简单)

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

示例 3:

输入:root = []
输出:[]

提示:

  • 树中节点数目范围在 [0, 100] 内
  • -100

来源:力扣(LeetCode
链接:https://leetcode.cn/problems/invert-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、解题思路

翻转二叉树是树的基本操作之一,可以使用递归和非递归两种方法。递归方法:交换当前左右节点,并直接调用递归即可。非递归方法:跟二叉树的层序遍历一样,需要用queue画辅助,先把根节点排入队列中,然后从队列中取出来,交换其左右节点,如果存在则分别将左右节点再排入队列中,以此类推直到队列中没有节点了

三、解题方法

3.1 Java实现-递归

public class Solution {
    public TreeNode invertTree(TreeNode root) {
        if (root == null) {
            return root;
        }
        TreeNode tmp = root.left;
        root.left = invertTree(root.right);
        root.right = invertTree(tmp);
        return root;
    }
}

3.2 Java实现-非递归

public class Solution2 {
    public TreeNode invertTree(TreeNode root) {
        if (root == null) {
            return root;
        }
        Deque q = new ArrayDeque<>();
        q.push(root);
        while (!q.isEmpty()) {
            TreeNode node = q.pop();
            TreeNode tmp = node.left;
            node.left = node.right;
            node.right = tmp;
            if (node.left != null) {
                q.push(node.left);
            }
            if (node.right != null) {
                q.push(node.right);
            }
        }
        return root;
    }
}

四、总结小记

  • 2022/9/29 在你成为领导者之前,成功的全部就是自我的成长;当你成了领导者,成功的全部就变成帮助他人成长。—通用电气CEO 杰克 · 韦尔奇《商业的本质》

Original: https://www.cnblogs.com/okokabcd/p/16743338.html
Author: okokabcd
Title: leetcode 226. Invert Binary Tree 翻转二叉树(简单)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/609633/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Mybatis源码分析(2)

    Mybatis源码分析(2) Mybatis源码分析(2) 接上一章总结【从哪里开始?】 1、SqlSessionManager 2、DefaultSqlSession 4、Sql…

    Java 2023年6月7日
    0102
  • SpringCloud实用篇02

    SpringCloud实用篇02 0.学习目标 Nacos: alibaba 注册中心/配置中心 Feign: OpenFeign Gateway: SpringCloud 1.N…

    Java 2023年6月13日
    066
  • 使用Thread类和Runnable接口实现多线程的区别

    先看两种实现方式的步骤: public class ThreadDemo{ public static void main(String[] args) { for (int i …

    Java 2023年6月8日
    095
  • Spring 4 集成 redis 实现缓存 二

    项目开发过程中经常用到mybatis,为了提升查询效率,mybatis支持一级和二级缓存,一级缓存基于SqlSession级别,默认开启,二级缓存基于Mapper级别;一级和二级缓…

    Java 2023年6月5日
    093
  • 在Win11的WSL中体验IDEA等GUI程序

    原本已经 放弃WSL很久了,这两天把Win10更新到Win11,看到WSL2已经发布,而且貌似还有很大升级还可以在 WSL中跑Linux GUI应用。在加上Win11的支持简直可以…

    Java 2023年6月16日
    091
  • 1_day01_java入门

    java入门 学习目标: 1.熟悉计算机编程语言 2.熟练掌握java特点 3.熟练配置java开发环境 4.熟练编写入门程序 5.熟练编写注释信息 一、计算机语言 1.1 什么是…

    Java 2023年6月8日
    066
  • 订单系统学习

    概述 本文主要讲述了在传统电商企业中,订单系统应承载的角色,就订单系统所包含的主要功能模块梳理了设计思路,并对订单系统未来的发展做了一些思考。 1、订单系统在企业中的角色 在搭建企…

    Java 2023年5月29日
    082
  • 关于多工序、多资源排程场景下的新成果

    在之前关于资源与工序的场景中写了一篇不同资源与工序组合下,APS设计难度的文章. 并针对多工序、多工序场景下排程的初步设计。 关于生产计划排程的种类及其特性. 后来,针对多工序、多…

    Java 2023年6月16日
    093
  • 面向对象(上)

    面向对象(上) java面向对象学习三条主线 * 1.java类及类的成员:属性、方法、构造器、代码块、内部类 * 2.面向对象的三大特征:封装,继承,多态 * 3.其他关键字:t…

    Java 2023年6月6日
    077
  • 【Java面试】并发编程高频面试题,请你说一下你对Happens-Before的理解

    “请你说一下你对Happens-Before的理解”你听到这个问题的时候,知道怎么回答吗?大家好,我是Mic,一个工作了14年的Java程序员。并发编程是面…

    Java 2023年6月16日
    082
  • 这个世界上只有一种真正的英雄主义,那就是认清生活的真相并且仍然热爱它

    人生当中成功只是一时的,失败却是主旋律。但是如何面对失败,却把人分成了不同的样子。有的人会被失败击垮,有的人能够不断地爬起来继续向前。澳大利亚队是如此的,西班牙队也是如此。我想真正…

    Java 2023年6月8日
    061
  • Spring 内部机制 Spring AOP

    Original: https://www.cnblogs.com/WCFGROUP/p/11920857.htmlAuthor: 暖风的风Title: Spring 内部机制 S…

    Java 2023年5月30日
    086
  • (Java初学篇)IDEA项目新建流程和软件配置优化以及怎么彻底删除项目

    相信很多小伙伴们在初学 Java 时都会出现这样的情况,就是在网上一顿搜索加捣鼓终于把 JDK 和IDEA 这两款软件安装配置好,但是发现面对这个陌生的软件此时却无从下手,那么接下…

    Java 2023年6月15日
    0136
  • 中值定理笔记

    总共有十个定理,其中四个和函数有关,五个和导函数有关,剩下一个是积分中值定理。 当(f(x))在闭区间(\lbrack a,b\rbrack)上连续时,(\exists m,M \…

    Java 2023年6月7日
    0109
  • SpringMVC 解析(五)URI链接处理

    URI在网络请求中必不可少,Spring提供了一些工具类用于解析或者生成URL,比如根据参数生成GET的URL等。本文会对Spring MVC中的URI工具进行介绍,本文主要参考S…

    Java 2023年6月8日
    081
  • java本地缓存

    由于服务器、数据库、网络等资源有限,无法支撑越来越多的请求与计算量,所以将一部分数据放在缓存中,以此减小薄弱环节的计算量和请求流程。 网站中缓存的应用场景:1:可以缓存整个页面的h…

    Java 2023年6月15日
    086
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球