Recover Binary Search Tree

Two elements of a binary search tree (BST) are swapped by mistake.

Recover the tree without changing its structure.

Note:
A solution using O(n) space is pretty straight forward. Could you devise a constant space solution?

思路:

一个BST树,如果中序遍历输出,那么一定是从小到大输出的。于是就可以中序遍历二叉树,如果第一次发现一个节点的值比之前访问的节点值小,那么之前的那个节点就是被交换的第一个节点。接着向后访问,如果是第二次找到某个节点的值比之前访问的节点值小,那么这个节点就是被交换的第二个节点。这是因为第一次找到的是交换顺序中比较大的,第二次是比较小的。但是有一个问题,如果两个节点相邻就会出问题,只能找到一个。仔细分析,如果交换的是两个相邻的节点,第一个节点是访问之前的节点,第二个自然是当前访问的节点。所以,不管怎样,只要满足一个节点的值比之前访问的节点值小,被交换的第二个节点一定是当前访问的节点。

题解:

/*** Definition for binary tree* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:TreeNode *pre, *p, *q;void inorder(TreeNode *root) {if(!root)return;inorder(root->left);if(pre && pre->val > root->val) {if(!p)p = pre;q = root;}pre = root;inorder(root->right);}void recoverTree(TreeNode *root) {if(!root)return;pre=p=q=NULL;inorder(root);swap(p->val,q->val);}
};

View Code

转载于:https://www.cnblogs.com/jiasaidongqi/p/4277067.html

[leetcode] Recover Binary Search Tree相关推荐

  1. LeetCode 99. Recover Binary Search Tree

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

  2. LeetCode: 173. Binary Search Tree Iterator

    LeetCode: 173. Binary Search Tree Iterator 题目描述 Implement an iterator over a binary search tree (BST ...

  3. LeetCode OJ - Recover Binary Search Tree

    题目: Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without chan ...

  4. Recover Binary Search Tree

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

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

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

  6. Recover Binary Search Tree,恢复二叉排序树

    问题描述:题意就是二叉树中有两个节点交换了,恢复结构. Two elements of a binary search tree (BST) are swapped by mistake. Recov ...

  7. LeetCode Closest Binary Search Tree Value II

    原题链接在这里:https://leetcode.com/problems/closest-binary-search-tree-value-ii/ 题目: Given a non-empty bin ...

  8. LeetCode:Validate Binary Search Tree

    题目链接 Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defin ...

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

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

最新文章

  1. asp.net 后台事件掉用前台js
  2. ES5和ES6数组遍历方法详解
  3. “tel.xls.exe病毒”解决方法
  4. MyEclipse10.0
  5. 关于可变字符串StringBuffer和String的区别总结
  6. c# uri.host_C#| 具有示例的Uri.Host属性
  7. HTTP笔记-浏览器是如何识别点击的链接是下载文件还是展示页面
  8. Qt工作笔记-QList (链表) QVector (数组)【转载】
  9. c语言第4章作业,《C语言程序设第4章作业.doc
  10. VCIX-NV学习指南
  11. 【工具使用系列】关于 MATLAB Embedded Coder, 你需要知道的事
  12. C#.NET通用权限管理系统组件中用少数几行代码实现记录页面状态
  13. 对 Sea.js 进行配置 seajs.config
  14. ti嵌入式linux设计外包,基于嵌入式Linux的PMP系统设计与实现
  15. uniapp 电商小程序 置顶特效/分享特效/红包特效 简单实现效果
  16. 计算机网络中链路是指什么意思,什么是计算机网络中的上行链路端口?
  17. Oracle | 初级-第一章 Oracle概述
  18. 关于魔兽守卫军的改进建议
  19. 丰巢“羊毛”,出在快递身上,让用户买单!
  20. python金融编程入门_金融编程与量化金融—Python编程汇总

热门文章

  1. 数字建模matlab,Matlab基础及数学建模.ppt
  2. php实现中英文网站插件,多语言网站方案
  3. c hello world_C和C++使用对方编译的动态链接库
  4. cmake 版本 arm_在 ARM 架构服务器上编译 Greenplum6并制作rpm安装包
  5. IETester-IE兼容性测试工具
  6. 加载静态文件,父模板的继承和扩展
  7. python--内置函数
  8. 计算机网络系统--Microsoft Lync 与 腾讯通RTX 对比(转载)
  9. 解决jre生成错误的问题
  10. 〖Linux〗Kubuntu KDE开机后总是提示“system program problem detected”的解决方法