/*struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};*/
class Solution {
public:
void recoverTree(TreeNode *root) {
TreeNode *p = root, *tmp;
TreeNode *first=NULL,*second=NULL;
TreeNode *pre=new TreeNode(INT_MIN);//pre 上一次访问的结点
while (p) {
if (p->left == NULL) {
if(p->val < pre->val)
{
if(first==NULL) first=pre;
second=p;
}
pre=p;
p = p->right;
}
else {
tmp = p->left;
while (tmp->right != NULL && tmp->right != p)
tmp = tmp->right;
if (tmp->right == NULL) {
tmp->right = p;
p = p->left;
}
else {
if(p->val < pre->val)
{
if(first==NULL) first=pre;
second=p;
}
pre=p;
tmp->right = NULL;
p = p->right;
}
}
}
int _tmp=first->val;
first->val=second->val;
second->val=_tmp;
}
};
Recover Binary Search Tree
最新推荐文章于 2022-03-13 20:36:15 发布