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?
Subscribe to see which companies asked this question
//有一个BST有两个节点不小心互换了,恢复这颗树
算法
中序遍历,找出节点,互换
时间:O(n)
空间:o(n)
class Solution {
public:
TreeNode *p,*q;
TreeNode *prev;
void recoverTree(TreeNode *root)
{
p=q=prev=NULL;
inorder(root);
swap(p->val,q->val);
}
void inorder(TreeNode *root)
{
if(root->left)inorder(root->left);
if(prev!=NULL&&(prev->val>root->val))
{
if(p==NULL)p=prev;
q=root;
}
prev=root;
if(root->right)inorder(root->right);
}
};
算法
O(1)的解法
http://fisherlei.blogspot.kr/2012/12/leetcode-recover-binary-search-tree.html
这里写代码片