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

来源:互联网 发布:数据库应用课程 编辑:程序博客网 时间:2024/06/06 01:14

题目:

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);    }};



0 0