Recover Binary Search Tree
来源:互联网 发布:linux服务器搭建 编辑:程序博客网 时间:2024/05/18 04:00
题目:
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?
1. 最直观的方法是用一个向量中序遍历存储整棵树,然后查找不符合增序的数(如果只找到一个,则说明交换的两个数相邻),不过这需要O(n)的空间。
2. 另一个方法也是使用递归中序遍历树,使用pre记录当前节点的前一个节点,进行比较,这种方法不需要额外的向量开销,但是如果把递归的空间算上,则平均需要O(lgn)空间,最差需要O(n)空间。
代码如下:
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: void recoverTree(TreeNode *root) { TreeNode *pre = NULL, *mis1 = NULL, *mis2 = NULL; findMistakes(root, mis1, mis2, pre); if(mis1 != NULL && mis2 != NULL) { int tmp = mis1->val; mis1->val = mis2->val; mis2->val = tmp; } }private: void findMistakes(TreeNode *root, TreeNode *&mis1, TreeNode *&mis2, TreeNode *&pre) { if(root == NULL) return; findMistakes(root->left, mis1, mis2, pre); if(pre != NULL && pre->val > root->val) { if(mis1 == NULL) { mis1 = pre; mis2 = root; } else { mis2 = root; } } pre = root; findMistakes(root->right, mis1, mis2, pre); }};
第三种方法分析请参考:http://www.cnblogs.com/graph/archive/2013/08/11/3252079.html
0 0
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Asp.Net MVC 学习笔记 - ASP.NET MVC 3的概述
- opensuse 12 引导ubunt 12.04ISO安装
- eclipse配置
- Java的整型
- SAP Errors described – from 3G-244 to 3G-264
- Recover Binary Search Tree
- 【程序这样写真别扭】new 一个匿名抽象类 带构造函数参数
- Flappy bird源代码
- Silverlight5_Tools安装出错解决办法
- 安卓4.3 Launcher2 应用信息加载流程
- HTML5音乐播放器效果非常漂亮
- 基于c++的抽象工厂模式实现初探。
- 发布android项目是的log管理
- 练习