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

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.xdnf.cn/news/18071.html

相关文章:

  • 我们为什么需要时序数据库?
  • Docker学习--认识Docker
  • 基于nvm安装管理多个node.js版本切换使用(附上详细安装使用图文教程+nvm命令大全)
  • 视觉语言导航(6)——Speaker-Follower模型 数据增强 混合学习 CLIP 3.1后半段
  • Vision Master的C#脚本与opencv联合编程
  • 【低空安全】低空安全简介
  • Springboot项目3种视图(JSP、Thymeleaf、Freemarker)演示
  • TypeScript中的import语法详解
  • qt svg缺失元素, 原因是不支持 rgba
  • Gemini 学习记录:实践与反思
  • 区块链练手项目(持续更新)
  • [优选算法专题二滑动窗口——将x减到0的最小操作数]
  • 数据结构:在二叉搜索树中插入元素(Insert in a BST)
  • 已开源:Highcharts.NET,Highcharts Android,与Highcharts iOS集成
  • JUC常用线程辅助类详解
  • Vue中v-show与v-if的区别
  • 【每日一题】Day 6
  • 代码管理系统简介与部署
  • 2.4 双向链表
  • Redis学习--集群 数据分片、哈希槽、集群配置、主从容错迁移、扩缩容
  • Golang 后台技术面试套题 1
  • 《Nursing Research》(护理SCI)LaTeX模板详细教程:从入门到投稿(一)
  • OpenMemory MCP发布!AI记忆本地共享,Claude、Cursor一键同步效率翻倍!
  • Week 12: 深度学习补遗:RNN与LSTM
  • Go语言并发编程 ------ 锁机制详解
  • 【C++知识杂记1】智能指针及其分类
  • w嵌入式分享合集68
  • 什么是EDA(Exploratory Data Analysis,探索性数据分析)
  • MariaDB 多源复制
  • Windchill 11 Enumerated Type Customization Utility-枚举类型自定义实用程序