leetcode_c++:树:Recover Binary Search Tree(099)

来源:互联网 发布:linux终端退出命令 编辑:程序博客网 时间:2024/06/07 06:56

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?
Subscribe to see which companies asked this question

//有一个BST有两个节点不小心互换了,恢复这颗树


算法

中序遍历,找出节点,互换
时间:O(n)
空间:o(n)


class Solution {public:TreeNode *p,*q;TreeNode *prev;    void recoverTree(TreeNode *root)    {        p=q=prev=NULL;        inorder(root);        swap(p->val,q->val);          }    void inorder(TreeNode *root)    {        if(root->left)inorder(root->left);        if(prev!=NULL&&(prev->val>root->val))        {            if(p==NULL)p=prev;            q=root;        }        prev=root;        if(root->right)inorder(root->right);    }};

算法

O(1)的解法

http://fisherlei.blogspot.kr/2012/12/leetcode-recover-binary-search-tree.html


这里写代码片
0 0
原创粉丝点击