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

力扣0099——恢复二叉搜索树

恢复二叉搜索树

难度:中等

题目描述

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

示例1

输入: root = [1,3,null,null,2]
输出:[3,1,null,null,2]

示例2

输入: root = [3,1,4,null,null,2]
输出:[2,1,4,null,null,3]

题解

因为二叉搜索树的性质可得,将其中序遍历存储到列表中,数值为单调递增,由此可以得到以下步骤

  • 遍历列表,找到递增中断点
  • 再次遍历列表,找到中断点应该在的位置
  • 将两个数值进行交换

完成之后即为所求

想法代码

public class TreeNode
{public int val;public TreeNode left;public TreeNode right;public TreeNode(int val = 0, TreeNode left = null, TreeNode right = null){this.val = val;this.left = left;this.right = right;}
}
class Solution
{IList<TreeNode> travelList = new List<TreeNode>();public static void Main(String[] args){TreeNode root = new TreeNode(3){left = new TreeNode(1),right = new TreeNode(4){left = new TreeNode(2)}};Solution solution = new Solution();solution.RecoverTree(root);foreach (var a in solution.travelList){Console.Write(a.val + " ");}}public void RecoverTree(TreeNode root){Travel(root);int index1 = 1;int index2 = 0;while (index1 < travelList.Count){if (travelList[index1].val > travelList[index1 - 1].val){index1++;}else{break;}}while (index2 < travelList.Count){if (travelList[index2].val > travelList[index1 - 1].val){break;}index2++;}TreeNode treeNode1 = travelList[index1 - 1];TreeNode treeNode2 = travelList[index2 - 1];int val1 = treeNode1.val;int val2 = treeNode2.val;treeNode1.val = val2;treeNode2.val = val1;}public void Travel(TreeNode root){if (root == null){return;}Travel(root.left);travelList.Add(root);Travel(root.right);}
}
avel(root.left);travelList.Add(root);Travel(root.right);}
}
http://www.lryc.cn/news/289124.html

相关文章:

  • 机器学习核心算法
  • libjsoncpp 的编译和交叉编译
  • 【Unity美术】如何用3DsMax做一个水桶模型
  • 如何用一根网线和51单片机做简单门禁[带破解器]
  • 在 VUE 项目中,使用 Axios 请求数据时,提示跨域,该怎么解决?
  • 1.【Vue3】前端开发引入、Vue 简介
  • 一起学习ETCD系列——运维操作之etcdctl使用
  • Spring Security 存储密码之 JDBC
  • 第3章-python深度学习——(波斯美女)
  • 蓝桥杯备战——4.继电器/蜂鸣器
  • Redis高级特性之地理空间索引
  • R语言【taxlist】——as():将 taxlist 对象强制转换为 list 对象
  • 使用POI生成word文档的table表格
  • C# 继承、多态性、抽象和接口详解:从入门到精通
  • python在线聊天室(带聊天保存)
  • jenkins+gitlab实现Android自动打包填坑之旅
  • 洛谷B3625迷宫寻路
  • GPT-SoVITS 测试
  • 人工智能:更多有用的 Python 库
  • Linux BIO如何下发到HDD?
  • 《动手学深度学习(PyTorch版)》笔记4.6
  • Hadoop-MapReduce-源码跟读-客户端篇
  • 《游戏-03_3D-开发》之—新输入系统人物移动攻击连击
  • 滴水逆向三期笔记与作业——02C语言——10 Switch语句反汇编
  • 燃烧的指针(三)
  • 微服务架构实施攻略:如何选择合适的微服务通信机制?
  • 【jetson笔记】解决vscode远程调试qt.qpa.xcb: could not connect to display报错
  • 网络安全产品之认识安全隔离网闸
  • Java通过模板替换实现excel的传参填写
  • 眼底增强型疾病感知蒸馏模型 FDDM:无需配对,fundus 指导 OCT 分类