问题描述:
Two elements of a binary search tree (BST) are swapped by mistake.
Recover the tree without changing its structure.
Note:A solution using O(n) space is pretty straight forward. Could you devise a constant space solution?
代码:
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;
}
本文介绍了如何通过常空间复杂度的算法,解决二叉搜索树中两个元素位置错误交换的问题,包括代码实现、流程解释及关键逻辑分析。

1574

被折叠的 条评论
为什么被折叠?



