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