1 题目描述
二叉搜索树(BST)中的两个节点被错误地交换了,
请在不改变树的结构的情况下恢复这棵树。
备注;
用O(n)的空间解决这个问题的方法太暴力了,你能设计一个常数级空间复杂度的算法么?
2 代码实现
老实说我没太明白。
3 解题思路
/**
* 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;
TreeNode *cur = NULL;
inOrder(root, pre, cur);
if(pre != NULL && cur != NULL){
int tmp = pre->val;
pre->val = cur->val;
cur->val = tmp;
}
}
void inOrder(TreeNode *root, TreeNode *&pre, TreeNode *&cur){
if(root == NULL) return;
if(root->left) inOrder(root->left, pre, cur);
if(pre && pre->val > root->val) cur = root;
if(pre == NULL || cur == NULL) pre = root;
if(root->right) inOrder(root->right, pre, cur);
return;
}
};
4 运行结果
运行时间:13ms
占用内存:628k