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

leetcode0099. 恢复二叉搜索树- medium

1 题目:99. 恢复二叉搜索树

官方标定难度:

给你二叉搜索树的根节点 root ,该树中的 恰好 两个节点的值被错误地交换。请在不改变其结构的情况下,恢复这棵树 。

示例 1:

在这里插入图片描述

输入:root = [1,3,null,null,2]
输出:[3,1,null,null,2]
解释:3 不能是 1 的左孩子,因为 3 > 1 。交换 1 和 3 使二叉搜索树有效。

示例 2:

在这里插入图片描述

输入:root = [3,1,4,null,null,2]
输出:[2,1,4,null,null,3]
解释:2 不能在 3 的右子树中,因为 2 < 3 。交换 2 和 3 使二叉搜索树有效。

提示:

树上节点的数目在范围 [2, 1000] 内
− 2 31 < = N o d e . v a l < = 2 31 − 1 -2^{31} <= Node.val <= 2^{31} - 1 231<=Node.val<=2311

进阶:使用 O(n) 空间复杂度的解法很容易实现。你能想出一个只使用 O(1) 空间的解决方案吗?

2 solution

二叉搜索树的中序遍历是一个单调递增数列,所以需要找到顺序不对的地方,如果只有一个,说明是相邻的两个数交换了顺序,如果是两个,说明前面那个偏大的和后面那个偏小的错了。

代码

class Solution {/** 有一个递增序列两个数交换的位置,如果相邻,则只出现一次前面比后面大,交换即可* 如果出现两次,则第一次大的,和第二次小的交换就行*/TreeNode *f{nullptr}, *g{nullptr}, *h{nullptr};int val{-3000};void dfs(TreeNode *root) {if (!root) return;dfs(root->left);if (root->val < val) {if (!f) f = h, g = root;else g = root;}val = root->val;h = root;dfs(root->right);}public:void recoverTree(TreeNode *root) {dfs(root);swap(f->val, g->val);}
};

结果

在这里插入图片描述

相关文章:

  • 约束constraint
  • Python删除Elasticsearch指定数据
  • 从 Vue 到 React:React.memo + useCallback 组合技
  • php 支付宝官方 Alipay Easy SDK
  • es的range失效
  • 【Docker】在Ubuntu平台上的安装部署
  • 无线监控系统分类全解析:搭配视频融合平台EasyCVR开启高效监控
  • 23种设计模式-结构型模式之组合模式(Java版本)
  • 黑马商城-微服务笔记
  • 云原生时代的双轮驱动
  • Unity 将Excel表格中的数据导入到Mysql数据表中
  • 4.23刷题记录(栈与队列专题)
  • 将输入帧上下文打包到下一个帧的预测模型中用于视频生成
  • RocketMQ 核心架构速览
  • Elasticsearch复习笔记
  • 数据集 | 苹果目标检测数据集
  • 车载功能测试-车载域控/BCM控制器测试用例开发流程【用例导出方法+优先级划分原则】
  • 如何避免AI编造虚假文献
  • CSS-跟随图片变化的背景色
  • 从GPT-5到Claude 3:大模型竞赛的下一站是什么?
  • 美联储褐皮书:关税政策背景下,美国部分地区物价上涨、经济前景恶化
  • 视频丨习近平同阿塞拜疆总统会谈:两国建立全面战略伙伴关系
  • 山东省检察院答澎湃:惩治网络售假,强化“全链条”刑事打击
  • 美国那点事|特朗普的“刀”砍向国务院,美国霸权迎来历史拐点?
  • 涡虫首上太空,神舟二十号任务将开展3项生命科学实验
  • 世界读书日丨人均一年超10本!你达到上海平均阅读水平了吗