[LeetCode] Recover Binary Search Tree

来源:互联网 发布:什么批发软件最好用 编辑:程序博客网 时间:2024/06/06 11:37

wo 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?

confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.

SOLUTION: use inorder traversal to check whether every node is in increasing order. Keep two pointers to the nodes out of order.

/** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    //return the previous visited node    TreeNode* inorder(TreeNode *root,TreeNode *prev, TreeNode*& n1, TreeNode*& n2)    {        if(root==NULL) return prev;                prev=inorder(root->left,prev,n1,n2);                //check whether the root is out of order        if(prev!=NULL && root->val < prev->val)        {            if(n1==NULL)                n1=prev;            //swap nodes            n2=root;        }                prev=root;        return inorder(root->right,prev,n1,n2);    }    void recoverTree(TreeNode *root) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        TreeNode *n1=NULL;        TreeNode *n2=NULL;        TreeNode *parent=NULL;        inorder(root,parent,n1,n2);        if(n1!=NULL && n2!=NULL)        {        int tmp=n1->val;        n1->val=n2->val;        n2->val=tmp;        }    }};


原创粉丝点击