LeetCode: Recover Binary Search Tree

来源:互联网 发布:Oracle 序列的值sql 编辑:程序博客网 时间:2024/06/08 17:17

思路:中序遍历搜索树,用一个变量 pre 存储当前节点 root 在中序序列的前一个节点(第一个节点的前一个为NULL),只要pre的值大于root的值,则记录这个pre,这是其中一个出错的位置,同样的过程记录好两个位置后,进行位置调换即可。

code:

class Solution {    TreeNode *pre = NULL;    TreeNode *node1 = NULL,*node2 = NULL;public:    void preOrderTree(TreeNode *root){        if(root == NULL)            return;        preOrderTree(root->left);        if(pre != NULL && pre->val > root->val){                node2 = root;                if(node1 == NULL)                    node1 = pre;        }        pre = root;        preOrderTree(root->right);    }    void recoverTree(TreeNode *root) {        preOrderTree(root);        if(node1 != NULL && node2 != NULL){            int i = node1->val;            node1->val = node2->val;            node2->val = i;        }    }};


0 0