[leetcode]99 Recover Binary Search Tree

来源:互联网 发布:413是什么意思网络语言 编辑:程序博客网 时间:2024/05/14 06:31

问题描述:

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?

代码:

void recoverTree(TreeNode *root) {        if(root ==NULL)            return;                bool haveOne = false;        bool isFirst = true;                TreeNode *pre = root;        TreeNode* p = root;        vector<TreeNode*> melement(2);        stack<TreeNode* > myStack;                while(p!=NULL || !myStack.empty())        {            while(p!=NULL){                myStack.push(p);                p = p->left;            }                        p = myStack.top();            if(isFirst){                isFirst = false;                pre = p;            }            else {                if(p->val < pre->val){                    if(!haveOne){                        melement[0] = pre;                        melement[1] = p;                        haveOne = true;                       }                    else{                        melement[1] = p;                        break;                    }                }                pre = p;            }            myStack.pop();            p = p->right;                    }        int temp = melement[0]->val;        melement[0]->val = melement[1]->val;        melement[1]->val = temp;        return;            }


0 0
原创粉丝点击