微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

[LeetCode] 99. Recover Binary Search Tree

Two elements of a binary search tree (BST) are swapped by mistake.

Recover the tree without changing its structure.

Example 1:

Input: [1,3,null,2]

   1
  /
 3
     2

Output: [3,1,2]

   3
  /
 1
     2

Example 2:

Input: [3,4,2]

  3
 / 1   4
   /
  2

Output: [2,3]

  2
 / 1   4
   /
  3

Follow up:

  • A solution using O(n) space is pretty straight forward.
  • Could you devise a constant space solution?

 

因为是BST,所以需要用到inorder traversal来判断是哪两个点需要交换,因此,我们用pre来记录之前遍历的node,然后第一个pre.val > node.val,表明pre为第一个不对的node.

然后通过同样的道理,如果第一个找到了,我们就不断通过pre.val > node.val 这一条件将node更新为第二个点.最后将第一个点和第二个点交换,即可.

 

1. Constriants

1) None => nothing

 

2. Ideas

Inorder traversal     T; O(n)     S; O(1)

 

3. Code

class Solution:
    def recoverBST(self,root):
        ans = [None,None,None]  #firNode,secNode,pre
        def helper(node):
            if not node: return 
            helper(node.left)
            if not ans[0] and ans[2] and ans[2].val > node.val:
                ans[0] = ans[2]
            if ans[0] and ans[2] and ans[2].val > node.val:
                ans[0] = node
            ans[2] = node
            helper(node.right)
        helper(root)
        ans[0].val,ans[1].val = ans[1].val,ans[0].val

 

4. Test cases

1) 

Example 1:

Input: [1,3]

  2
 / 1   4
   /
  3

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐