您的位置:首页 > 编程语言 > C语言/C++

leetcode_c++:树: Recover Binary Search Tree(099)

2016-08-24 17:24 477 查看
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

这里写代码片
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: