void recoverTreeHelper(TreeNode *curNode, TreeNode *&preNode, TreeNode *&first, TreeNode *&second) {
     if (curNode == NULL) return;
     recoverTreeHelper(curNode->left, preNode, first, second);
     if (preNode && preNode->val > curNode->val) {
         if (first == NULL) first = preNode;
         second = curNode;
     }
     preNode = curNode;
     recoverTreeHelper(curNode->right, preNode, first, second);
 }
 void recoverTree(TreeNode *root) {
     n1 = n2 = prev = NULL;
     recoverTreeHelper(root);
     if (n1 && n2) {
         swap(n1->val, n2->val);
     }
 }
    void recoverTreeHelper(TreeNode *root) {

        if (root == NULL) return;

        recoverTreeHelper(root->left);
        if (prev) {
            if (prev->val > root->val){
                if (n1==NULL) {
                    n1 = prev;
                }
                n2 = root;
            }
        }
        prev = root;
        recoverTreeHelper(root->right);
    }
 void recoverTree(TreeNode *root) {
     // Start typing your C/C++ solution below
     // DO NOT write int main() function
     TreeNode *prev = NULL, *first = NULL, *second = NULL;
     recoverTreeHelper(root, prev, first, second);
     swap(first->val, second->val);
 }