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

浙公网安备 33010602011771号