当前位置: 首页 > news >正文

LeetCode热题100--226. 翻转二叉树--简单

1. 题目

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

示例 1:
在这里插入图片描述
输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]

示例 2:
在这里插入图片描述
输入:root = [2,1,3]
输出:[2,3,1]

示例 3:
输入:root = []
输出:[]

2. 题解

/*** 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;}TreeNode tmp = root.right;root.right = root.left;root.left = tmp;invertTree(root.left);invertTree(root.right);return root;}
}

3. 解析

  1. public TreeNode invertTree(TreeNode root): 这是主方法,接收一个类型为TreeNode的参数root。这个参数表示二叉树的根节点。

  2. if(root == null){ return null; }: 如果输入的根节点(也就是整个二叉树)不存在,那么返回null。这是递归调用结束的基本情况。

  3. TreeNode tmp = root.right;: 这一行创建了一个临时变量tmp来保存原来的右子树。这是因为我们稍后需要将左子树移到右边(反转),所以需要先保存下来。

  4. root.right = root.left;: 这一行将根节点的右孩子指针指向左子树。我们在执行这个操作之前已经将原来的右子树保存在tmp中了,因此我们可以安全地将其赋值给新的右子树位置。

  5. root.left = tmp;: 最后,我们将根节点的新左子树设置为我们刚刚保存的原始右子树(现在位于tmp中)。

  6. invertTree(root.left); 和 invertTree(root.right);: 然后我们递归地对左子树和右子树调用invertTree()方法,以确保整个二叉树都被反转了。如果某个子树为空(意味着这个分支的原始树是叶节点或空树),那么这两个函数调用将简单地返回null,这是我们期望的结果。

  7. return root;: 最后,返回翻转后的根节点。在递归过程中,这个值会被层层向上传递,最终成为整棵树的新根节点并作为函数的输出返回。

http://www.lryc.cn/news/625195.html

相关文章:

  • week2-[循环嵌套]数位和为m倍数的数
  • 重温 K8s 基础概念知识系列五(存储、配置、安全和策略)
  • NL2SQL 技术深度解析与项目实践
  • 在 PyCharm Notebook 中安装 YOLO
  • 抽象工厂设计模式 Abstract Factory
  • yum安装搭建lamp架构部署WordPress个人论坛
  • 美图披露半年报:AI应用取得突破,净利润同比大增71.3%
  • 上周60+TRO案件,波比的游戏时间/丹迪世界/飞盘/迪奥/多轮维权,手表/汽车品牌持续发力,垃圾桶专利等新增侵权风险!
  • 【MongoDB】多种聚合操作详解,案例分析
  • 启发式合并
  • powershell中的cmdlet
  • 【每日一题】Day 7
  • MySQL架构和储存引擎
  • Web安全 - 构建安全可靠的API:基于国密SM2/SM3的文件上传方案深度解析
  • 多智能体架构设计:从单Agent到复杂系统的演进逻辑
  • 人工智能 | 基于大数据的皮肤病症状数据可视化分析系统(matlab源码)
  • 发布npmjs组件库
  • AopAutoConfiguration源码阅读
  • 鼠标右键没有“通过VSCode打开文件夹”
  • JVM学习笔记-----类加载
  • FPGA-Vivado2017.4-建立AXI4用于单片机与FPGA之间数据互通
  • Google 的 Opal:重新定义自动化的 AI 平台
  • WPF 打印报告图片大小的自适应(含完整示例与详解)
  • Rust 入门 生命周期-next2 (十九)
  • 牛津大学xDeepMind 自然语言处理(1)
  • Centos7 使用lamp架构部署wordpress
  • 接口和抽象类的区别(面试回答)
  • 【深度长文】Anthropic发布Prompt Engineering全新指南
  • Java面向对象三大特性:封装、继承、多态深度解析与实践应用
  • ⭐CVPR2025 RigGS:从 2D 视频到可编辑 3D 关节物体的建模新范式