99. 恢复二叉搜索树

#中序遍历,寻找插值位置并交换
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def recoverTree(self, root: Optional[TreeNode]) -> None:"""Do not return anything, modify root in-place instead."""#记录中序遍历的值nums = []self.inorder(root, nums)print(nums)x,y = self.swappos(nums)self.swap(root,2,x,y)#找到替换值的位置def inorder(self, root, nums):if root:self.inorder(root.left,nums)nums.append(root.val)self.inorder(root.right,nums)def swappos(self, nums):n = len(nums)index1 = -1index2 = -1for i in range(n-1):if nums[i+1] < nums[i]:index1 = i+1if index2 == -1:index2 = ielse:breakx,y = nums[index2], nums[index1]return [x,y]def swap(self, root, count, num1, num2):if root:if root.val == num1 or root.val == num2:root.val = num2 if root.val == num1 else num1count -= 1if count == 0:returnself.swap(root.left, count, num1, num2)self.swap(root.right, count, num1, num2)
#边中序遍历,边判断# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def recoverTree(self, root):stack = []x, y = None, Noneprev = None#迭代形式的中序遍历:借助栈while stack or root:#遍历左子树while root:stack.append(root)root = root.left#左子树遍历完,root为nullroot = stack.pop()if prev and root.val < prev.val:x = rootif y == None:y = prevelse:break#这个root判断完,将其赋予prevprev = rootroot = root.rightself.swap(x,y)def swap(self,x,y):tmp = y.valy.val = x.valx.val = tmp

 

#moriss遍历
class Solution:def recoverTree(self, root):x, y, pred, predecessor = None, None, None, Nonewhile root:if root.left:predecessor = root.leftwhile predecessor.right and predecessor.right != root:predecessor = predecessor.rightif predecessor.right == None:predecessor.right = rootroot = root.leftelse:predecessor.right = Noneroot = root.rightelse:root = root.right

 

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def recoverTree(self, root):x, y, pred, predecessor = None, None, None, Nonewhile root:if root.left:predecessor = root.leftwhile predecessor.right and predecessor.right != root:predecessor = predecessor.rightif predecessor.right == None:predecessor.right = rootroot = root.leftelse:if pred and root.val < pred.val:#y为后面那个值y = rootif not x:x = predpred = rootpredecessor.right = Noneroot = root.rightelse:if pred and root.val < pred.val:y = rootif not x:x = predpred = rootroot = root.rightx.val,y.val = y.val,x.val

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

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

相关文章

啥是构造器?

当我们new一个对象时就是在引用构造器 构造器又叫做构造函数 构造函数一般分为无参构造函数与有参构造函数 假设我们创建一个pet类&#xff0c;这个类里面就会有一个看不见的自动生成的无参构造函数 如果pet类里没有这个隐形的无参构造&#xff0c;我们new一个对象时就会报错…

ArcGIS高程点生成等高线

基本步骤&#xff1a;数据清洗→创建TIN→TIN转栅格→等值线→平滑线。 1.&#xff08;重要&#xff09;数据清理&#xff1a;删除高程点中的高程异常值数据。 2.创建TIN:系统工具→3D Analyst Tools→数据管理→TIN→创建TIN&#xff08;可直接搜索工具TIN&#xff09;。 单击…

铂炭催化剂,2026年市场预计将以6.5%左右的复合年增长率增长

铂碳催化剂广泛用于各种工业应用&#xff0c;包括化学、制药和汽车领域。在对清洁能源的需求不断增加和环境问题意识不断提高的推动下&#xff0c;铂碳催化剂市场正在稳步增长。本次分析&#xff0c;我们将从全球市场和中国市场分别考察铂碳催化剂市场的发展趋势。 全球市场分析…

OSPF ROUTER-ID-新版(15)

目录 整体拓扑 操作步骤 1.INT 验证Router-ID选举规则 1.1 查看路由器Router-ID 1.2 配置R1地址 1.3 查看R1接口信息 1.4 查看R1Router-ID 1.5 删除接口IP并查看Router-ID 1.6 手工配置Router-ID 2.基本配置 2.1 配置R1的IP 2.2 配置R2的IP 2.3 配置R3的IP 2.4 配…

winserver2008 r2服务器iis配置支持flv,f4v,mp4格式视频

很多政府单位网站一直在使用WIN服务器&#xff0c;大部分网站都使用多年基本使用.NET或者CMS系统建站&#xff0c;系统环境也一直是老版本&#xff0c;今天在维护过程中又出现了新问题&#xff0c;上传的MP4文件不支持网站上播放&#xff0c;顺便也分享下解决过程。当我们架设的…

在VMware安装CentOS 7:详细教程

安装准备工作 本地虚拟机&#xff1a;我这里使用的是VMware Workstation 17 Pro centos7系统ISO镜像&#xff1a;我这里使用的是CentOS-7-x86_64-DVD-2009.iso&#xff0c;具体的下载地址是在阿里云官方镜像站&#xff1a;centos-7.9.2009-isos-x86_64安装包下载_开源镜像站-阿…

Springboot启动流程-持续记录中

注:转载请携带本文链接及公众号信息 公众号&#xff1a;codelike 基于springboot2.6.x 源码 Springboot启动之第一篇 SpringApplication构造器 启动入口方法是new SpringApplication.run(),一切的开始都从这里 这里做了什么呢 分为初始化SpringApplication实体、执行run()…

QLayout布局器QObject子节点遍历

遍历QObject的子节点 #include <QObject> #include <QDebug>void printObjectTree(const QObject *object, int level 0) {if (!object) return;// 创建缩进字符串&#xff0c;用于表示层级QString indent(level * 2, ); // 打印对象的类名和对象名qDebug() <…

使用 pytest 相关特性重构 appium_helloworld

一、前置说明 在 pytest 基础讲解 章节,介绍了 pytest 的特性和基本用法,现在我们可以使用 pytest 的一些机制,来重构 appium_helloworld 。 appium_helloworld 链接: 编写第一个APP自动化脚本 appium_helloworld ,将脚本跑起来 代码目录结构: pytest.ini 设置: [pyt…

基于ssm社区生鲜电商平台论文

目 录 摘 要 I Abstract II 1 绪论 1 1.1研究背景 1 1.2研究现状 1 1.3研究内容 2 2 相关技术简介 3 2.1 B/S结构 3 2.2 MYSQL数据库 3 2.3 Java简介 4 2.4 SSM框架简介 5 3 系统分析 7 3.1 可行性分析 7 3.1.1 技术可行性 7 3.1.2 经济可行性 7 3.1.3 操作可行性 7 3.1.3 法律…

利用太阳能供电的远程视频监控方案设计:智能分析网关V4+4G摄像头鱼塘视频监控

一、行业背景 传统的鱼塘养殖模式由于养殖区域面积大、管理难度高&#xff0c;经常会出现偷钓者、盗窃鱼苗、非法入侵等监管难题&#xff0c;给养殖户带来了不小的经济损失。为了解决这些问题&#xff0c;搭建鱼塘远程监控系统成为了必要之举。通过远程监控系统&#xff0c;管…

Gateway集成方法以及拦截器和过滤器的使用

前提&#xff1a;请先创建好一个SpringBoot项目 1. 引入依赖 SpringCloud 和 alibabaCloud 、 SpringBoot间对版本有强制要求&#xff0c;我使用的springboot是3.0.2的版本。版本对应关系请看&#xff1a;版本说明 alibaba/spring-cloud-alibaba Wiki GitHub <dependency…

css 用多个阴影做出光斑投影的效果 box-shadow

css 用多个阴影做出光斑投影的效果 box-shadow 你首先需要知道的一点是 box-shadow 可以接收多个值&#xff0c;也就是可以设置多个阴影&#xff0c;这样就可以做一个类似光斑投影的效果。 一、效果 二、代码 里面用到了我一些 scss 工具方法&#xff0c;不过不影响&#xf…

2023年华为OD机试(python)B卷-符合要求的结对方式

一、题目 题目描述&#xff1a; 用一个数组A代表程序员的工作能力&#xff0c;公司想通过结对编程的方式提高员工的能力&#xff0c;假设结对后的能力为两个员工的能力之和&#xff0c;求一共有多少种结对方式使结对后能力为N。 二、输入输出 输入描述: 5 1 2 2 2 3 4 第一行为…

《网络是怎样连接的》2.1节图表(自用)

图3.1&#xff1a;协议栈的组成 图3.2&#xff1a;netstat命令查看套接字 上图中每一行就是一个套接字 图3.3&#xff1a;协议栈在浏览器访问DNS服务器与web服务器时的具体工作流程 套接字由协议栈创建 应用程序通过Socket库中的程序组件与协议栈交互

Amphion tts(Text to Speech) 语音合成

强烈推荐使用带 GPU 的 Ubuntu 或 Centos 系统运行&#xff0c;可以租一个比较便宜的机器实例运行&#xff0c;如AutoDL 有了机器我们就可以按步骤操作了 step1 模型下载 git clone https://github.com/open-mmlab/Amphion.git cd Amphionstep2 下载训练好的模型文件 huggin…

OR-3120——IGBT驱动光耦,替代HCPL-3120,FOD3120,TLP250H等等

具有MOSFET高输入阻抗和GTR低导通压降特性提供隔离反馈 高隔离电压 3.0A输出电流 工业温度范围&#xff1a;–40C 至 110C 宽工作 VCC 范围 特点&#xff1a; VCM 1500V 时最小共模抑制 &#xff08;CMR&#xff09; 为 35 kV/μs 最大低电平输出电压 &#xff08;VOL&…

服务端如何防止订单重复支付

服务端如何防止订单重复支付&#xff1f; 概述为了防止掉单&#xff0c;这里可以这样处理&#xff1a;为了防止订单重复提交&#xff0c;可以这样处理&#xff1a;附上微信支付最佳实践&#xff1a; 概述 如图是一个简化的下单流程&#xff0c;首先是提交订单&#xff0c;然后…

有效解决vcruntime140_1.dll丢失的问题,关于vcruntime140_1.dll文件

今天在使用电脑的过程中突然提示找不到vcruntime140_1.dll&#xff0c;出现这样的提示后&#xff0c;想要在打开程序时&#xff0c;有再一次提示找不到vcruntime140_1.dll&#xff0c;不能在正常打开程序&#xff0c;那么有什么办法可以解决vcruntime140_1.dll丢失的问题呢&…

第十章 Bus信息总线

Bus信息总线 gitee:springcloud_study: springcloud&#xff1a;服务集群、注册中心、配置中心&#xff08;热更新&#xff09;、服务网关&#xff08;校验、路由、负载均衡&#xff09;、分布式缓存、分布式搜索、消息队列&#xff08;异步通信&#xff09;、数据库集群、分布…