LeetCode OJ - Recover Binary Search Tree
来源:互联网 发布:淘宝可以改好评吗 编辑:程序博客网 时间:2024/06/06 03:16
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、中序遍历生成序列,找出无序元素。 2、递归记录两个无序元素,最后交换
首先看一个升序数组中,若两个数被错误交换了,如何处理:
#include <iostream>#include <vector>#include <stack>#include <map>#include <queue>#include <set>#include <stdio.h>using namespace std;int node1 = INT_MIN;int node2 = INT_MIN;void DFS(int *A, int n) { for(int i = 0; i < n - 1; i++) {if(A[i] > A[i+1]) {if(node1 == INT_MIN) { node1 = i;node2 = i + 1;} else { node2 = i + 1;}}}int tmp = A[node1]; A[node1] = A[node2];A[node2] = tmp;}int main(int argc, char* argv[]){ int A[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 26, 13, 14, 12};int n = sizeof(A) / sizeof(int);DFS(A, n);for(int i = 0; i < n; i++) { cout << A[i] << " ";}cout << endl;return 0;}
中序遍历相当于依次访问left、root、right,而pre依次记录的子访问的前一个节点。如同pre1与root1比较,若pre1 > root1则表明pre1为问题节点;若pre2 > root2则root2为问题节点。记录这两个节点并交换。
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {private: TreeNode *node1, *node2; TreeNode *pre; void traverse(TreeNode *root) { if (root == NULL) { return; } traverse(root->left); if (pre != NULL && pre->val > root->val) { node2 = root; if (node1 == NULL) { node1 = pre; } } pre = root; traverse(root->right); } public: void recoverTree(TreeNode *root) { // Start typing your C/C++ solution below // DO NOT write int main() function node1 = node2 = NULL; pre = NULL; traverse(root); swap(node1->val, node2->val); }};
0 0
- LeetCode OJ:Recover Binary Search Tree
- LeetCode OJ - Recover Binary Search Tree
- LeetCode OJ - Recover Binary Search Tree
- LeetCode OJ Recover Binary Search Tree
- LeetCode: Recover Binary Search Tree
- LeetCode: Recover Binary Search Tree
- [Leetcode] Recover Binary Search Tree
- [LeetCode] Recover Binary Search Tree
- [Leetcode] Recover Binary Search Tree
- [leetcode] recover binary search tree
- LeetCode -- Recover Binary Search Tree
- [LeetCode]Recover Binary Search Tree
- [LeetCode] Recover Binary Search Tree
- LeetCode:Recover Binary Search Tree
- [Leetcode]Recover Binary Search Tree
- Leetcode: Recover Binary Search Tree
- LeetCode-Recover Binary Search Tree
- [leetcode] Recover Binary Search Tree
- mysql使用07
- iOS连接mysql数据库及基本操作
- sqlserver 日志清除工具
- 第一节知识导图
- request.getRequestDispatcher() adt卸载 R.java文件丢失
- LeetCode OJ - Recover Binary Search Tree
- CF-46D-Parking Lot(线段树,区间合并,点表示线段)
- Activity 的启动模式
- 对输入的字符串按照字母序列排序并输出
- MySQL查询不区分大小写问题
- 面对现实,做好自己(三)
- Spring / Hibernate应用性能调优
- Opencv SIFT特征提取
- 使用CSS3 @font-face实现个性化字体