⭐Recover Binary Search Tree

/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
TreeNode *first;
TreeNode *middle;
TreeNode *last;
TreeNode *prevNode;

void inorder(TreeNode *root) {
    if(root == NULL) return;
    
    inorder(root->left);
    
    if(prevNode != NULL && root->val < prevNode->val) {
        if(first == NULL) {
            first = prevNode;
            middle = root;
        } else 
            last = root;
    }
            
    prevNode = root;
    inorder(root->right);
}
vector<int> Solution::recoverTree(TreeNode* A) {
    first = middle = last = NULL;
    prevNode = new TreeNode(INT_MIN);
    inorder(A);  
    vector<int> res = {first->val};
    if(last)
        res.push_back(last->val);
    else
        res.push_back(middle->val);
    
    sort(res.begin(), res.end());
    return res;
}

Last updated