您的位置:首页 > 其它

LeetCode OJ 之 Recover Binary Search Tree(恢复二叉搜索树)

2015-06-10 08:38 375 查看

题目:

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?
一个二叉搜索树的两个结点被互换了,不改变它的结构恢复二叉树。

思路:

中序遍历过程中找出这两个弄错位置的结点,然后互换这两个结点的值。

代码:

/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode *mistake1 , *mistake2 , *pre;
void recoverTree(TreeNode* root)
{
findMistake(root);
if(mistake1 && mistake2)
swap(mistake1->val , mistake2->val);
}
void findMistake(TreeNode *root)
{
if(root == NULL)
return;
findMistake(root->left);
if(mistake1 == NULL && pre && pre->val >= root->val)
mistake1 = pre;
if(mistake1 && pre->val >= root->val)
mistake2 = root;
pre = root;
findMistake(root->right);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: