99. Recover Binary Search Tree(恢复二叉搜索树)
题目链接: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(恢复二叉搜索树)相关推荐
- 99. Recover Binary Search Tree 恢复二叉搜索树
二叉搜索树中的两个节点被错误地交换. 请在不改变其结构的情况下,恢复这棵树. 示例 1: 输入: [1,3,null,null,2] 1/3\2 输出: [3,1,null,null,2] 3/1\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 ...
- 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 ...
- 098 Validate Binary Search Tree 验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树. 一个二叉搜索树有如下定义: 左子树只包含小于当前节点的数. 右子树只包含大于当前节点的数. 所有子树自身必须也是二叉搜索树. ...
- Binary Search Tree(二叉搜索树、二叉查找树、二叉排序树)
搜索树数据结构支持许多动态几何操作,包括SEARCH.MININUM.MAXINUM.PREDECESSOR.SUCCESSOR.INSERT和DELETE等.因此,我们可以使用一个搜索树作为字典或者 ...
- leetcode 235. Lowest Common Ancestor of a Binary Search Tree | 235. 二叉搜索树的最近公共祖先(哈希表)
题目 https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-search-tree/ 题解 哈希表解法思路来自左程云< ...
- LeetCode 99. Recover Binary Search Tree
LeetCode 99. Recover Binary Search Tree 刚看到这个题真是一脸懵逼啊... 博客转载自:http://www.cnblogs.com/grandyang/p/42 ...
- 99. Recover Binary Search Tree (Tree; DFS)
Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing ...
- 第五周 Leetcode 99. Recover Binary Search Tree (HARD)
Leetcode99 给定一个 二叉搜索树,其中两个节点被交换,写一个程序恢复这颗BST. 只想到了时间复杂度O(n)空间复杂度O(h) h为树高的解法,还没想到空间O(1)的解法. 交换的情况只有两 ...
最新文章
- 从GNOME切换到KDE了
- ubuntu 编译caffe makefile.config
- 栏目图片 栏目描述_网站描述怎么写?对网站优化有什么作用?
- PL/SQL - 03
- VB6.0中,DTPicker日期、时间控件不允许为空时,采用文本框与日期、时间控件相互替换赋值(解决方案)
- 蓝桥杯 入门训练 序列求和
- 中文文档保存到mysql_mysql 中文 存储
- 主机不可达和端口不可达
- 银行转账系统(Spring小项目)
- web服务器超过访问上限显示,当Web服务器访问人数超过了设计访问人数上限,将可能出现的HTTP状态...
- MATLAB之特征值和特征向量
- correct string value: '\xE8\xB6\x85\xE7\xBA\xA7...' for column 'product_description' at row 1
- python 爬取链家北京租房信息
- 你被抖音“魔性”的设计风格洗脑了吗?
- 【tensorrt】——插件写法及python plugin大体流程
- 全球与中国高氧潜水电脑市场深度研究分析报告
- Java学习经典《第一行代码》第二版
- java程序设计实践教程张永常_java程序设计实用教程
- 嵌入式与通用计算机的相同点,嵌入式计算机与通用计算机的区别与联系
- 日常刷题_cf_6.26
热门文章
- PHP 自由职业,自由职业者:不止自由,更多自我
- VBoxManager命令解析
- html切换导航不同页面,HTML按钮:导航到其他页面 - 不同的方法
- 微信小程序导航栏切换页面
- 【那些年我们一起看过的论文】之《Real-Time Loop Closure in 2D LIDAR SLAM》
- sha1安全码校验工具(apk)
- python调用打印机打印图片_Python使用Python将图像位数据打印到ESC/POS打印机
- 安卓开发中ToggleButton按钮的使用
- [转帖]Photoshop制作梦幻效果婚纱照片
- python人民币小写转大写_Python小程序 -- 人民币小写转大写辅助工具