226.翻转二叉树

news2024/9/21 18:29:24

226.翻转二叉树

题目

给你一棵二叉树的根节点 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 = []
输出:[]

提示:

  • 树中节点数目范围在 [0, 100] 内
  • -100 <= Node.val <= 100

题解

只要是二叉树就需要考虑的一个问题,选择哪种遍历方式。
这道题需要翻转这棵二叉树,也就是以根元素为中心点,左右对应位置的节点互换。
对于根节点来说

[root.left,root.right] = [root.right,root.left]

我选择前序遍历,从上往下边遍历变交换左右节点。

递归三部曲

  1. 递归的参数和递归的返回值
    参数是指向当前遍历到的节点,表示本次递归应该交换该节点的左右孩子节点。
    最后题目需要返回的是根结点,所以只需要把第一次递归的根结点返回就行了。
var invertTree = function(root) {
return root;
}
  1. 递归的终止条件
    当遍历到叶子节点说明本条路径已经走完了
 if(root ==null)return root;
  1. 本次递归的逻辑
    递归函数的作用可以抽象为:交换当前节点root的的左右孩子节点
    本次交换完毕后,再接着去交换当前节点的左孩子节点root.left的左右孩子节点,最后交换当前节点的右孩子节点root.right的左右孩子节点。
[root.left,root.right] = [root.right,root.left];//交换左右节点
if(root.left)invertTree(root.left);
if(root.right)invertTree(root.right);   

代码

//写法1
var invertTree = function(root) {
    if(root ==null)return root;
    [root.left,root.right] = [root.right,root.left];//交换左右节点
    if(root.left)invertTree(root.left);
    if(root.right)invertTree(root.right);
    return root;
};
//写法2 因为每一层都会返回当前层的root节点,所以可以将root.left直接赋值给以root.right为根节点交换之后的子树。
var invertTree = function(root) {
    if(root ==null)return root;
    let leftNode = root.left;
    root.left = invertTree(root.right);
    root.right = invertTree(leftNode);
    return root;
};

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

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

相关文章

神器必会!特别好使的编辑器Source Insight

已剪辑自: https://mp.weixin.qq.com/s/nA9VJeMjC4gDpDSI8r-2FA “Source Insight&#xff08;以下简称SI&#xff09;是世界上最好的编辑器”&#xff0c;说这句话不知道会不会出门被打呢&#xff1f;-_- 中国古话说得好&#xff0c;“文无第一&#xff0c;武无第二”&#x…

都2202年了,不会有人还不会发布npm包吧

背景 介绍了axios的二次封装用于支持常规请求及自定义请求&#xff0c;并对同一时间内的相同请求做拦截处理&#xff08;如果您没有阅读过这篇文章&#xff0c;建议您花费3分钟大致了解&#xff09;。恰逢最近准备写一个跨框架组件库&#xff08;工作量很大&#xff0c;前端三…

浏览器存储(webStorage)常用API以及简单使用

前言 最近正值世纪杯期间&#xff0c;不知道大家心目中的球队成绩如何&#xff0c;在此期间我学了浏览器存储(webStorage)以及API,下面就分享给大家 浏览器存储(webStorage) 存储内容不是Vue团队打造的&#xff0c;原本的js中就有&#xff0c;所以可以不适用脚手架编译&…

UGUI性能优化学习笔记(番外)一些零星的优化点

一、Overdraw 1.1 什么是Overdraw overdraw也就是过度绘制&#xff0c;是指在每个渲染周期内&#xff0c;屏幕上每个像素最理想只渲染一次&#xff0c;但是由于UI元素的重叠会导致像素会被渲染多次&#xff0c;每次渲染从CPU阶段到GPU阶段会消耗大量资源&#xff0c;如果这种…

[附源码]计算机毕业设计JAVA学习资源共享与在线学习系统

[附源码]计算机毕业设计JAVA学习资源共享与在线学习系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; S…

Spring统一异常处理捕获不到CompletableFuture异步编排中的异常的问题

Spring统一异常处理捕获不到CompletableFuture异步编排中的异常的问题Spring统一异常处理捕获不到CompletableFuture异步编排中的异常的问题Spring统一异常处理简单例子多线程无法捕获场合正常场合&#xff08;不使用异步编排&#xff09;代码ServiceImExcpHandlerController结…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java高校车辆租赁管理系统23qhn

要开始我们毕业设计的第一步的关键就是选好我们的课题&#xff0c;有的同学开始选题的时候想着按照传统的课题延续下去&#xff0c;在设计题目时&#xff0c;不要过于笼统广泛&#xff0c;选择题目其实并不难&#xff0c;要多从自身的角度出发&#xff0c;要结合你们当前所处的…

【java】网络编程

文章目录网络编程概述基本概念IP地址概念InetAddress端口与协议概念UDP通信编程UDP发送数据UDP接受数据UDP通信程序练习TCP通信编程TCP发送数据TCP接收数据TCP通信程序练习网络编程概述 基本概念 IP地址概念 终端检查&#xff1a; InetAddress package heima.网络编程;impor…

nginx配置文件 location语法

1&#xff1a;nginx官方文档给出location语法如下&#xff1a; location [|~|~*|^~] uri { ....... }2&#xff1a;路径匹配 开头表示精确匹配。如 A 中只匹配根目录结尾的请求&#xff0c;后面不能带任何字符串&#xff1b;^~ 开头表示uri以某个常规字符串开头&#xff0c;不是…

字符串中第二大的数字(遍历)

力扣链接&#xff1a;力扣 给你一个混合字符串 s &#xff0c;请你返回 s 中 第二大 的数字&#xff0c;如果不存在第二大的数字&#xff0c;请你返回 -1 。 混合字符串 由小写英文字母和数字组成。 示例 1&#xff1a; 输入&#xff1a;s "dfa12321afd" 输出&…

Keras生成式学习(五)

生成式深度学习 生成式学习即创造学习&#xff0c;深度学习开始创造 一、使用LSTM 生成文本 给定前面的标记&#xff08;token&#xff0c;通常是单词或字符&#xff09;&#xff0c;能够对下一个标记的概率进行建模的任何网络都叫作语言模型&#xff08;language model&…

Android Camera性能分析 - 第25讲 CameraServer LatencyHistogram简介

本讲是Android Camera性能分析专题的第25讲 ​&#xff0c;我们介绍CameraServer LatencyHistogram简介&#xff0c;包括如下内容&#xff1a; LatencyHistogram是什么CameraServer默认有哪些Latency的Histogram如何获取CameraLatencyHistogram数据CameraLatencyHistogram类详…

Java项目:SSM CRM人事管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 CRM人事管理系统&#xff0c;主要功能有&#xff1a; 用户管理&#xff1a;用户查询、添加用户、编辑、删除&#xff1b; 职位管理&#xff1a…

Java基于springboot+vue的防护用品销售购物商城系统 前后端分离

开发背景 随着近些年疫情的爆发人们对个人医疗相关防护也越来越重视了&#xff0c;尤其是在疫情开始之初&#xff0c;人们对疫情感受到非常的恐慌&#xff0c;虽然在国家和领导人的领导下疫情一次次的得到了控制&#xff0c;但是我们还是要做好个人防护&#xff0c;为了让更多…

5、Linux文件系统

目录 1、万事万物皆文件 2、Linux二级文件目录 3、Linux的文件操作 4、读取文件信息 在Linux中万物皆文件 1、万事万物皆文件 1)在Linux中&#xff0c;所有的东西都是以文件的方式进行操作 2)在Linux中&#xff0c;文件的访问和Window的不一样。window依靠的是通过盘符进…

Tomcat经验2

背景 资产系统与财务系统对接&#xff0c;开发经常让我在数据库中执行数据库更新语句&#xff0c;并重启Tomcat&#xff0c;将log文件发给他&#xff0c;他能够根据log文件判断&#xff0c;数究竟有没有传对。 在这个过程中会出现一个问题&#xff1a; 部署在同一台Web服务器…

ORT(ONNX runtime)GPU 问题总结

现象 bt的堆栈信息 standard io上的错误输出 从报错信息上看是非法的内存访问&#xff0c;但是报错的位置不一定是真实的位置&#xff0c;因为GPU都是异步发起的&#xff0c;错误可能会被在后面的op捕捉。例如cudaEventDestory&#xff1a; debug方式 思维方式 复现&#…

Python中matplotlib为多个列表数据绘制小提琴图

本文介绍基于Python中matplotlib模块与seaborn模块&#xff0c;利用多个列表中的数据&#xff0c;绘制小提琴图&#xff08;Violin Plot&#xff09;的方法。 小提琴图作为一种将箱型图与核密度图分别所能表达的信息相结合的数据可视化图&#xff0c;在数据分析中得以广泛应用&…

【电动车】电动汽车两阶段优化调度策略(Matlab代码实现)

目录 1 概述 2 数学模型 3 运行结果 4 结论 4 Matlab代码实现 1 概述 在当前阶段,电动汽车通常被视为即插即充的常规负荷,这浪费了其可观的储荷能力"。研究表明,非快充需求的电动汽车停靠时间远大于其充电时间[2,因此可通过充电站管理电动汽车的充放 电功率,使电动…

数据分析必备的5个工具,你用过几个?

数据有了&#xff0c;但是怎么让它们“听话”且输出为好看的图表呢&#xff1f;相信这是每一个做数据的人都思考过的问题吧。我们在工作、学习中经常进行会借助一些表格或者图表来进行信息的展示&#xff0c;一般大家最常用的是Excel表格或者PPT&#xff0c;但是随着近些年物联…