kniost

谁怕,一蓑烟雨任平生

0%

LeetCode 99. Recover Binary Search Tree

99. Recover Binary Search Tree

Difficulty: Hard

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

Recover the tree without changing its structure.

Example 1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Input: [1,3,null,null,2]

1
/
3
\
2

Output: [3,1,null,null,2]

3
/
1
\
2

Example 2:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Input: [3,1,4,null,null,2]

3
/ \
1 4
/
2

Output: [2,1,4,null,null,3]

2
/ \
1 4
/
3

Follow up:

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

Solution

Language: Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
private TreeNode first, second, prev;
public void recoverTree(TreeNode root) {
if (root == null) {
return;
}
prev = new TreeNode(Integer.MIN_VALUE);
inorder(root);

int tmp = first.val;
first.val = second.val;
second.val = tmp;
}

private void inorder(TreeNode root) {
if (root == null) {
return;
}
inorder(root.left);

if (first == null && root.val <= prev.val) {
first = prev;
}

if (first != null && root.val <= prev.val) {
second = root;
}

prev = root;
inorder(root.right);
}
}