题目链接:https://leetcode.com/problems/recover-binary-search-tree/

思路:

看到二叉搜索树时,我想到的是中序遍历符合从大到小的原则。

然后根据中序遍历这一特性找到哪两个节点需要交换。

最初写的时候踩得一个小坑:

Input: [1,3,null,null,2]1/3\2Output: [3,1,null,null,2]3/1\2

中序遍历输入为3 2 1;

按照正常思维,只需判断出前一个大于当前节点就可以确定两个元素了。

但是上面的例子,由于3和1的交换,导致先遍历的2也大于当前的1,

所以在第一次出现反常条件时,仅仅能确定first元素对应的节点,second节点则需要持续更新。

直到不再出现prev.val>current.val。

AC 22ms 98% Java:

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode(int x) { val = x; }* }*/
class Solution {TreeNode prev=null;TreeNode first=null;TreeNode second=null;public void recoverTree(TreeNode root) {helper(root);int temp=first.val;first.val=second.val;second.val=temp;}public void helper(TreeNode root){if(root==null)return;helper(root.left);if(prev!=null){if(first==null&&prev.val>root.val)first=prev;if(first!=null&&prev.val>root.val)second=root;}prev=root;helper(root.right);}
}

helper方法部分不能写成:

if(prev!=null){if(prev.val>root.val){first=prev;second=root;}
}

因为第一个需要互换的节点是在第一次出现prev.val>root.val时就可以确定了的。

后续只需不断更新需要互换的第二个元素。

99. Recover Binary Search Tree(恢复二叉搜索树)相关推荐

  1. 99. Recover Binary Search Tree 恢复二叉搜索树

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

  2. [CareerCup] 4.5 Validate Binary Search Tree 验证二叉搜索树

    4.5 Implement a function to check if a binary tree is a binary search tree. LeetCode上的原题,请参见我之前的博客Va ...

  3. LeetCode 669. Trim a Binary Search Tree修剪二叉搜索树 (C++)

    题目: Given a binary search tree and the lowest and highest boundaries as L and R, trim the tree so th ...

  4. 098 Validate Binary Search Tree 验证二叉搜索树

    给定一个二叉树,判断其是否是一个有效的二叉搜索树. 一个二叉搜索树有如下定义:     左子树只包含小于当前节点的数.     右子树只包含大于当前节点的数.     所有子树自身必须也是二叉搜索树. ...

  5. Binary Search Tree(二叉搜索树、二叉查找树、二叉排序树)

    搜索树数据结构支持许多动态几何操作,包括SEARCH.MININUM.MAXINUM.PREDECESSOR.SUCCESSOR.INSERT和DELETE等.因此,我们可以使用一个搜索树作为字典或者 ...

  6. leetcode 235. Lowest Common Ancestor of a Binary Search Tree | 235. 二叉搜索树的最近公共祖先(哈希表)

    题目 https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-search-tree/ 题解 哈希表解法思路来自左程云< ...

  7. LeetCode 99. Recover Binary Search Tree

    LeetCode 99. Recover Binary Search Tree 刚看到这个题真是一脸懵逼啊... 博客转载自:http://www.cnblogs.com/grandyang/p/42 ...

  8. 99. Recover Binary Search Tree (Tree; DFS)

    Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing ...

  9. 第五周 Leetcode 99. Recover Binary Search Tree (HARD)

    Leetcode99 给定一个 二叉搜索树,其中两个节点被交换,写一个程序恢复这颗BST. 只想到了时间复杂度O(n)空间复杂度O(h) h为树高的解法,还没想到空间O(1)的解法. 交换的情况只有两 ...

最新文章

  1. 从GNOME切换到KDE了
  2. ubuntu 编译caffe makefile.config
  3. 栏目图片 栏目描述_网站描述怎么写?对网站优化有什么作用?
  4. PL/SQL - 03
  5. VB6.0中,DTPicker日期、时间控件不允许为空时,采用文本框与日期、时间控件相互替换赋值(解决方案)
  6. 蓝桥杯 入门训练 序列求和
  7. 中文文档保存到mysql_mysql 中文 存储
  8. 主机不可达和端口不可达
  9. 银行转账系统(Spring小项目)
  10. web服务器超过访问上限显示,当Web服务器访问人数超过了设计访问人数上限,将可能出现的HTTP状态...
  11. MATLAB之特征值和特征向量
  12. correct string value: '\xE8\xB6\x85\xE7\xBA\xA7...' for column 'product_description' at row 1
  13. python 爬取链家北京租房信息
  14. 你被抖音“魔性”的设计风格洗脑了吗?
  15. 【tensorrt】——插件写法及python plugin大体流程
  16. 全球与中国高氧潜水电脑市场深度研究分析报告
  17. Java学习经典《第一行代码》第二版
  18. java程序设计实践教程张永常_java程序设计实用教程
  19. 嵌入式与通用计算机的相同点,嵌入式计算机与通用计算机的区别与联系
  20. 日常刷题_cf_6.26

热门文章

  1. PHP 自由职业,自由职业者:不止自由,更多自我
  2. VBoxManager命令解析
  3. html切换导航不同页面,HTML按钮:导航到其他页面 - 不同的方法
  4. 微信小程序导航栏切换页面
  5. 【那些年我们一起看过的论文】之《Real-Time Loop Closure in 2D LIDAR SLAM》
  6. sha1安全码校验工具(apk)
  7. python调用打印机打印图片_Python使用Python将图像位数据打印到ESC/POS打印机
  8. 安卓开发中ToggleButton按钮的使用
  9. [转帖]Photoshop制作梦幻效果婚纱照片
  10. python人民币小写转大写_Python小程序 -- 人民币小写转大写辅助工具