Two elements of a binary search tree (BST) are swapped by mistake.
Recover the tree without changing its structure.
Note:void recoverTree(TreeNode *root) {
if(root ==NULL)
return;
bool haveOne = false;
bool isFirst = true;
TreeNode *pre = root;
TreeNode* p = root;
vector<TreeNode*> melement(2);
stack<TreeNode* > myStack;
while(p!=NULL || !myStack.empty())
{
while(p!=NULL){
myStack.push(p);
p = p->left;
}
p = myStack.top();
if(isFirst){
isFirst = false;
pre = p;
}
else {
if(p->val < pre->val){
if(!haveOne){
melement[0] = pre;
melement[1] = p;
haveOne = true;
}
else{
melement[1] = p;
break;
}
}
pre = p;
}
myStack.pop();
p = p->right;
}
int temp = melement[0]->val;
melement[0]->val = melement[1]->val;
melement[1]->val = temp;
return;
}[leetcode]99 Recover Binary Search Tree
原文地址:http://blog.csdn.net/chenlei0630/article/details/42746615