[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

相关文章

自1998年我国取消了福利分房的政策后,房地产市场迅速开展蓬...
文章目录获取数据查看数据结构获取数据下载数据可以直接通过...
网上商城系统MySql数据库设计
26个来源的气象数据获取代码
在进入21世纪以来,中国电信业告别了20世纪最后阶段的高速发...