Skip to content

Instantly share code, notes, and snippets.

@kanrourou
Created December 3, 2017 05:26
/**
* Definition for a binary tree node.
* 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* culprit1 = nullptr, *culprit2 = nullptr, *prev = nullptr;
recover(root, culprit1, culprit2, prev);
int temp = culprit1->val;
culprit1->val = culprit2->val;
culprit2->val = temp;
}
private:
void recover(TreeNode* curr, TreeNode*& culprit1, TreeNode*& culprit2, TreeNode*& prev)
{
if(!curr)return;
recover(curr->left, culprit1, culprit2, prev);
if(prev && prev->val > curr->val)
{
if(!culprit1)
{
culprit1 = prev;
culprit2 = curr;
}
else
{
culprit2 = curr;
}
}
prev = curr;
recover(curr->right, culprit1, culprit2, prev);
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment