二叉搜索树的中序遍历为 递增序列_Go 刷 Leetcode 系列:恢复二叉搜索树

2023-11-09

二叉搜索树中的两个节点被错误地交换。

请在不改变其结构的情况下,恢复这棵树。

示例 1:

输入: [1,3,null,null,2]   1  / 3  \   2输出: [3,1,null,null,2]   3  / 1  \   2

示例 2:

输入: [3,1,4,null,null,2]  3 / \1   4   /  2输出: [2,1,4,null,null,3]  2 / \1   4   /  3

进阶:

  • 使用 O(n) 空间复杂度的解法很容易实现。

  • 你能想出一个只使用常数空间的解决方案吗?

解题思路:

1,二叉树的性质:左子树

2,如果中序遍历二叉树就能得到一个递增的序列

3,由于只交换了两个位置,假设这两个位置为first,second,则first左边小于first,右边大于first,second的左边都小于second,只需交换first,second位置即可

4,如何得到递增序列?

   中序遍历

5,用pre记录中序遍历的上一个位置,如果pre.val>cur.val说明pre的位置放错了,用first,second 记录两个位置,最好交换即可

6,注意,由于使用了全局指针,所以,使用前一定要初始化,否则结果很奇怪

/** * Definition for a binary tree node. * type TreeNode struct { *     Val int *     Left *TreeNode *     Right *TreeNode * } */var pre,first,second *TreeNodefunc recoverTree(root *TreeNode)  {    pre=nil    first=nil    second =nil    midOrder(root)     temp:=first.Val    first.Val=second.Val    second.Val=tempreturn}func midOrder(cur *TreeNode){if cur==nil{return    }    midOrder(cur.Left)if pre!=nil && pre.Val>cur.Val{if first==nil{            first=pre            second=cur        }else{            second=cur        }    }    pre=cur     midOrder(cur.Right)}

推荐阅读

  • Go 刷 LeetCode 系列:动态规划(6)正则表达式


喜欢本文的朋友,欢迎关注“Go语言中文网”:

3dd25959463c809fb8579d22040c60f2.png

Go语言中文网启用微信学习交流群,欢迎加微信:274768166

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

二叉搜索树的中序遍历为 递增序列_Go 刷 Leetcode 系列:恢复二叉搜索树 的相关文章

  • Python -BS4详细介绍

    Python BS4详细介绍 Python 在处理html方面有很多的优势 一般情况下是要先学习正则表达式的 在应用过程中有很多模块是非常方便的 先尝试使用BeautifulSoup和Urllib进行网页的处理 仅供学习 首先列举所需要导入
  • flutter 边框_Flutter作息定时器 app

    背景知识视频教程 学习Flutter Dart构建iOS和Android应用 国外课栈 viadean com Flutter Dart 完整的Flutter应用开发课程 国外课栈 viadean com Flutter的实际项目 国外课栈
  • 【OSATE学习笔记】失效模式与影响分析,FMEA(failure mode and effects analysis)

    目录 参考文献 简介 FMEA显著的作用案例 案例一 案例二 案例三 FMEA目标 FMEA进程 风险 Risk FMEA的特点及作用 FMEA的特点 FMEA的分类 专业术语 DFMEA与PFMEA的差别 六西格玛 SIX SIGMA 嵌
  • PHP内核探索:Apache运行与钩子函数

    Apache是目前世界上使用最为广泛的一种Web Server 它以跨平台 高效和稳定而闻名 按照去年官方统计的数据 Apache服务器的装机量占该市场60 以上的份额 尤其是在X Unix Linux 平台上 Apache是最常见的选择
  • 已解决(from docx import Document导包报错)ModuleNotFoundError: No module named ‘exceptions‘

    已解决 from docx import Document导包报错 ModuleNotFoundError No module named exceptions 文章目录 报错代码 报错翻译 报错原因 解决方法 千人全栈VIP答疑群联系博主
  • 1. R语言中grep函数和gsub()函数的使用

    1 grep 函数 1 语法结构 grep pattern x ignore case FALSE perl FALSE value FALSE fixed FALSE useBytes FALSE invert FALSE 各参数的含义如
  • linux内核分析:进程通讯方式

    信号 一旦有信号产生 我们就有下面这几种 用户进程对信号的处理方式 1 执行默认操作 Linux 对每种信号都规定了默认操作 例如 上面列表中的 Term 就是终止进程的意思 Core 的意思是 Core Dump 也即终止进程后 通过 C
  • 解决M1处理器安装PS闪退问题Photoshop 2021 fo mac(支持最新M1芯片处理器款mac)

    去年苹果在2020年11月11日突然发布了搭载自研M1芯片处理器的最新款Mac 由于这次新版mac系列史无前例的采用arm架构的芯片 导致很多之前为旧版mac开发的软件安装后不兼容无法使用 这其中就包括著名的Adobe系列软件 之前很多刚买
  • ppocrlabel简单教学

    前言 给我们小白成员的快速上手ppocrlabel的指南 1 ppocr环境配置 建议是先创建一个虚拟环境 直接参考 https blog csdn net weixin 42708301 article details 119864744
  • HDMI的DDC是什么

    DDC 是什么 DDC Display Data Channel 显示数据通道 在 HDMI 协议中用于 Source 和 Sink 两端进行数据交换 通常是基于 I2C 标准的一套通讯机制 在实际使用过程中 Source 端的 HDMI
  • 前端自动化测试之葵花宝典

    作者 京东零售 杜兴文 首先聊一下概念 Web 前端自动化测试是一种通过编写代码来自动化执行 Web 应用程序的测试任务的方法 它通常使用 JavaScript 和测试框架 如 Selenium Appium 等 来实现 Web 前端自动化
  • IRQL 和 分页内存

    IRQL是Interrupt ReQuest Level 中断请求级别 一个由windows虚拟出来的概念 划分在windows下中断的优先级 这里中断包括了硬中断和软中断 硬中断是由硬件产生 而软中断则是完全虚拟出来的 处理器在一个IRQ
  • python中把list列表所有或者部分的数变成整数,或者浮点数,字符串等等

    第一种 简单形式列表中是数字型 list x 1624865249825 0 316 0 351 0 32 0 107 0 4 0 1 7187 2970 0 1 0 list y 5249825 4 0 925 0 3903 1 7187
  • STM32HAL库 (cubemx) 两个HC05蓝牙模块相互通信相关问题的解决 数组串口发送与接受的方法

    主要问题 1 蓝牙模块的连接问题 2 蓝牙模块的工作模式 3 CUBEMX 配置串口注意事项 4 两个模块数据传输异常 前言 因为最近都在做基于STM32 MPU6050的手势控制机器人 遇到了无线数据传输的问题 正好手上有几个蓝牙模块 就
  • Latex系列2---段落编写+标题编写+目录生成

    接着上一节的简单中文文本 这节阐述的是一篇小规模文章的编写 段落编写 分段 写文章少不了分段的情况 latex中如何分段 先看一段代码和效果图 在这里我们看到代码中对于文章的分段有两种方式 1 空行 2 使用 par 空格 的形式 对于空行
  • blender基础笔记

    1 下载与安装 官网下载 官网下载 setam下载 steam下载 个人推荐这个 方便 修改语言 左上角 edit preferences Interface Transtation Langlish 疲了 看图吧 懒得写了 2 基础操作
  • 源码看CoordinatorLayout.Behavior原理

    http blog csdn net qibin0506 article details 50377592 在上一篇博客CoordinatorLayout高级用法 自定义Behavior中 我们介绍了如何去自定义一个CoordinatorL
  • Java中变量的作用域详解

    作用域定义 字面解释 scope 域即一定范围内的较大的地方 顾名思义就是在一定的范围内起作用 大白话解释 父母在家的时候能控制你的玩与学习 出了家门说了也白说 老师在校的时候能够管理你的行为 出了学校你都想管管他 这就是说 不管什么样的指
  • 单表数据量达多少时才建议分库分表

    1 阿里巴巴开发手册建议是 推荐 单表行数超过500万行或者单表容量超过2GB 才推荐进行分库分表 说明 如果预计三年后的数据量根本达不到这个级别 请不要在创建表时就分库分表 2 实际情况还要根据机器的配置视情况而定 3 阿里巴巴开发手册下

随机推荐

  • oracle生成UUID

    oracle生成UUID uuid Universally Unique Identifier 全局唯一标识符 是指在一台机器上生成的数字 它保证对在同一时空中的所有机器都是唯一的 按照开放软件基金会 OSF 制定的标准计算 用到了以太网卡
  • leetcode题解:最长公共前缀

    leetcode题解 最长公共前缀 题目描述 编写一个函数来查找字符串数组中的最长公共前缀 如果不存在公共前缀 返回空字符串 示例 1 输入 flower flow flight 输出 fl 示例 2 输入 dog racecar car
  • [Docker]Elasticsearch启动报错:Format version is not supported

    如果之前安装过Elasticsearch 安装新的Elasticsearch之前需要清空宿主机器对应的挂载目录下的文件数据
  • 打百万拳,走万里路。

    自我介绍 CSDN的大家你们好啊 我是一名大一的学生 与CSDN的相识还要从大一一次次查找知识点开始 当时由于刚接触编程 做什么都一头雾水而又不想去问老师那些简单的知识 于是自己在网上查找 就发现了CSDN这个大学生聚集地 由于很多都是和我
  • Python单重循环练习题

    第一次学python 求大佬指正 1 有1020个西瓜 第一天卖掉总数的一半后又多卖出两个 以后每天卖剩下的一半多两个 问几天以后能卖完 8天后能卖完 sum 1020 day 0 while sum gt 0 day 1 sum sum
  • 解决tomcat 启动超过45秒时间限制

    当在eclipse运行一个javaweb项目时 出现了如下图片中的问题 解决方法 1在如下页面中找到Servers 找不到的话可以通过Window gt gt Show View放到下方 2 双击Servers进到如下页面 3 打开箭头所指
  • C++: read SQL server data using System::Data::SqlClient;

    stdafx h stdafx h include file for standard system include files or project specific include files that are used frequen
  • 『学Vue2+Vue3』自定义指令、插槽、路由入门

    day05 一 学习目标 1 自定义指令 基本语法 全局 局部注册 指令的值 v loading的指令封装 2 插槽 默认插槽 具名插槽 作用域插槽 3 综合案例 商品列表 MyTag组件封装 MyTable组件封装 4 路由入门 单页应用
  • 20个最炫HTML5,jQuery和CSS3下拉菜单制作教程(附示例/源码)

    3 Level Navigation Menu 三级导航菜单 独具特色的导航菜单 包含CSS3渐变 多个子菜单和jQuery动画 CSS3 Minimalistic Navigation Menu 一个简单的CSS3动画导航菜单 SLIDE
  • python之logging模块详解

    python之 logging 模块 文章目录 python之 logging 模块 一 日志关概念 日志的作用 日志的等级 3 日志字段信息与日志格式 4 日志功能的实现 二 logging 模块介绍 什么是logging模块 loggi
  • Linux服务器启动tomcat的三种方式

    直接进入主题 首先cd进入tomcat的bin文件夹下 然后可以尝试以下三种启动方式 第一种 当前会话启动 startup sh 效果 然后tomcat就在后台启动了 我们还可以在当前会话中继续输入其它指令 比如 ps ef grep to
  • Source Insight 自动补全 C 关键字、keil 标准库关键字

    一开始遇到该问题疯狂 baidu bing 相关的 blog 寥寥无几 而且是差不多十年前的 blog 主要原因 Source Insight 默认不包含 C 库文件 keil 标准库 导致编辑代码时找不到 C 库的相关宏 变量类型 函数等
  • [1082]IDEA配置tomcat时出现的问题及解决(HTTP状态404-未找到)

    文章目录 问题1 没有新建环境变量 问题2 tomcat设置depolyment有误 问题1 没有新建环境变量 解决 在系统环境变量中添加变量CATALINA BASE和CATALINA BASE 两个变量的值都是tomcat的安装路径 如
  • 【Java SE】基本数据类型

    大家好 我是保护小周 本期为大家带来的是 Java的基本数据类型 内容会与C语言的基本数据类型进行基本的比较 数据类型提示 整型提升 以及简单了解 String 类型 进一步感受Java 的安全性 C语言混不下去了 面向对象的编程太爽了 目
  • Hyperledger Fabric 安装环境配置答疑(1)

    目录 1 Hyperledger Fabric只支持Ubuntu系统吗 2 cURL是什么 有什么作用 3 为什么要安装Docker及docker compose 4 能否不使用Golang而换作其他语言环境 5 一定要安装Node与npm
  • 多态的概念

    一 多态的概念 多态 Polymorphism 按字面的意思就是 多种状态 是面向对象的序设计语言最核心的特征 具体点就是去完成某个行为 当不同的对象去完成时会产生出不同的状态 多态建立在继承和封装的基础上 二 多态的分类 编译时多态 设计
  • 静态成员变量的初始化,以及可能引发的multiple define问题

    静态成员变量的初始化 以及可能引发的multiple define问题 先说个人问题的解决方式 不要再头文件中定义静态成员变量 示例 test h ifndef TEST H define TEST H class hh static in
  • 网络协议的三个要素是什么?各有什么含义?

    网络协议的三个要素是什么 各有什么含义 网络协议 为进行网络中的数据交换而建立的规则 标准或约定 由以下三个要素组成 1 语法 即数据与控制信息的结构或格式 2 语义 即需要发出何种控制信息 完成何种动作以及做出何种响应 3 规则 即事件实
  • 删除tomcat日志

    1 df 查看磁盘空间 2 对应用户进去删掉对应日志 3 重启tomcat 重新生成文件 或者 4 lsof grep deleted发现有大量刚刚删除文件的进程存在 kill掉进程 5 使用df 查看磁盘空间 发现已经回收 最好重启下to
  • 二叉搜索树的中序遍历为 递增序列_Go 刷 Leetcode 系列:恢复二叉搜索树

    二叉搜索树中的两个节点被错误地交换 请在不改变其结构的情况下 恢复这棵树 示例 1 输入 1 3 null null 2 1 3 2输出 3 1 null null 2 3 1 2 示例 2 输入 3 1 4 null null 2 3 1