【Leetcode】Recover Binary Search Tree
来源:互联网 发布:mac返回上一级快捷键 编辑:程序博客网 时间:2024/05/04 09:46
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?
二叉查找树中有两个节点被调换了,要求在不改变树的结构的情况下恢复原状。
思路:找到第一个比它的直接后继结点中的值更大的结点A,然后向后找到【第一个】比A中的值大的结点B,然后将A的值和B的直接前驱中的值交换,返回。
1、空间复杂度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:vector<TreeNode*> com;void Traverse(TreeNode *root){if (!root) return;Traverse(root->left);com.push_back(root);Traverse(root->right);} void recoverTree(TreeNode *root) { // Start typing your C/C++ solution below // DO NOT write int main() functioncom.clear(); Traverse(root);TreeNode *itema=NULL,*itemb=NULL;for (size_t i=0; i<com.size(); ++i){if (!itema && i+1 < com.size() && com[i]->val > com[i+1]->val){itema = com[i];while (++i < com.size()){if (com[i] > itema->val)break;}if (i == com.size())itemb = com.back();elseitemb = com[i-1];int temp = itema->val;itema->val = itemb->val;itemb->val = temp; break;}} }};
2 、空间复杂度O(1)的做法
/** * 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 *prev;TreeNode *itema, *itemb;void traverse(TreeNode *root){if(!root) return;traverse(root->left);if(prev){if(itema && root->val > itema->val)itemb = prev;if(!itema && prev->val > root->val)itema = prev;// pay attention!if (itema && itemb)return;}prev = root;traverse(root->right);} void recoverTree(TreeNode *root) {prev = itema = itemb = NULL;traverse(root);if (itema && !itemb)itemb = prev;if (itema && itemb){int temp = itema->val;itema->val = itemb->val;itemb->val = temp;} }};
- 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
- [LeetCode] Recover Binary Search Tree
- 【Leetcode】Recover Binary Search Tree
- Leetcode Recover Binary Search Tree
- LeetCode | Recover Binary Search Tree
- 2014年去哪网校园招聘
- 冒泡排序,选择排序,快速排序
- Unix NetWork Programming——环境搭建(解决unp.h等源码编译问题)
- 遇到ios发布AppStore UDID不通过,SDK问题
- 从 TDD 到 BDD
- 【Leetcode】Recover Binary Search Tree
- HDOJ 4737 - A Bit Fun 二分枚举
- java web从零单排第二十四期《hibernate》常用数据类型(1)
- 华为机试2014
- 进程(三)
- 最小表示法
- HDU 2686 Matrix (多线程DP)
- 黑马程序员 交通灯管理系统
- pat 1020. Tree Traversals (25)