2022-03-27 18:35:17 +08:00
< p > You are given the < code > root< / code > of a binary search tree (BST), where the values of < strong > exactly< / strong > two nodes of the tree were swapped by mistake. < em > Recover the tree without changing its structure< / em > .< / p >
< p > < / p >
2023-12-09 18:42:21 +08:00
< p > < strong class = "example" > Example 1:< / strong > < / p >
2022-03-27 18:35:17 +08:00
< img alt = "" src = "https://assets.leetcode.com/uploads/2020/10/28/recover1.jpg" style = "width: 422px; height: 302px;" / >
< pre >
< strong > Input:< / strong > root = [1,3,null,null,2]
< strong > Output:< / strong > [3,1,null,null,2]
< strong > Explanation:< / strong > 3 cannot be a left child of 1 because 3 > 1. Swapping 1 and 3 makes the BST valid.
< / pre >
2023-12-09 18:42:21 +08:00
< p > < strong class = "example" > Example 2:< / strong > < / p >
2022-03-27 18:35:17 +08:00
< img alt = "" src = "https://assets.leetcode.com/uploads/2020/10/28/recover2.jpg" style = "width: 581px; height: 302px;" / >
< pre >
< strong > Input:< / strong > root = [3,1,4,null,null,2]
< strong > Output:< / strong > [2,1,4,null,null,3]
< strong > Explanation:< / strong > 2 cannot be in the right subtree of 3 because 2 < 3. Swapping 2 and 3 makes the BST valid.
< / pre >
< p > < / p >
< p > < strong > Constraints:< / strong > < / p >
< ul >
< li > The number of nodes in the tree is in the range < code > [2, 1000]< / code > .< / li >
< li > < code > -2< sup > 31< / sup > < = Node.val < = 2< sup > 31< / sup > - 1< / code > < / li >
< / ul >
< p > < / p >
< strong > Follow up:< / strong > A solution using < code > O(n)< / code > space is pretty straight-forward. Could you devise a constant < code > O(1)< / code > space solution?