Second Minimum Node In a Binary Tree
Thoughts
Code
class Solution {
int lastMin, secondMin;
private int[] lastAndSecMin(TreeNode root) {
int[] result = new int[2];
if (root == null) {
result[0] = 0;
result[1] = 0;
return result;
}
int[] left = lastAndSecMin(root.left);
int[] right = lastAndSecMin(root.right);
int[] res = new int[5];
for (int i = 0; i < 2; i++) {
res[i] = left[i];
}
for (int i = 0; i < 2; i++) {
res[i + 2] = right[i];
}
res[4] = root.val;
Arrays.sort(res);
int min = 0;
for (int i = 0; i < 5; i++) {
if (res[i] != min) {
min = res[i];
break;
}
}
int secMin = min;
for (int i = 0; i < 5; i++) {
if (res[i] != secMin && res[i] != 0) {
secMin = res[i];
break;
}
}
result[0] = min;
result[1] = secMin;
return result;
}
public int findSecondMinimumValue(TreeNode root) {
int[] mins = lastAndSecMin(root);
if (mins[0] == mins[1]) {
return -1;
} else {
return mins[1];
}
}
}Analysis
Ver.2
Ver.3
Last updated