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); }