https://oj.leetcode.com/problems/recover-binary-search-tree/
一棵二叉搜索树,二叉搜索树的特征是,中根遍历的话,得到的序列是递增的
题目中,有两个节点弄混了,让恢复这个二叉搜索树
class Solution { public: TreeNode *LastNode = new TreeNode(INT_MIN); void recoverTree(TreeNode *root) { if(root == NULL) return; TreeNode **n1 = (TreeNode**)malloc(sizeof(TreeNode*)); TreeNode **n2 = (TreeNode**)malloc(sizeof(TreeNode*)); *n1 = NULL; *n2 = NULL; find(root,n1,n2); //swap int temp; temp = (*n1)->val; (*n1)->val = (*n2)->val; (*n2)->val = temp; } //中根遍历 void find(TreeNode *root, TreeNode **n1, TreeNode **n2) { if(root == NULL) return; find(root->left,n1,n2);
//分别处理了是 2 1 还是,3 2 1 的情况,高! if(*n1 == NULL && root->val < LastNode->val) { *n1 = LastNode; } if(*n1 != NULL && root->val < LastNode->val) { *n2 = root; } LastNode = root; find(root->right,n1,n2); } };