题目地址:
https://www.lintcode.com/problem/second-minimum-node-in-a-binary-tree/description
给定一棵二叉树,求其所有节点的次小值(重复的数字只算一个)。若不存在则返回 − 1 -1 −1。直接DFS即可,同时开两个变量分别存最小和次小。代码如下:
public class Solution {
private int min, secondMin;
/**
* @param root: the root
* @return: the second minimum value in the set made of all the nodes' value in the whole tree
*/
public int findSecondMinimumValue(TreeNode root) {
// Write your code here
min = secondMin = Integer.MAX_VALUE;
dfs(root);
return secondMin == Integer.MAX_VALUE ? -1 : secondMin;
}
private void dfs(TreeNode root) {
if (root == null) {
return;
}
if (root.val < min) {
secondMin = min;
min = root.val;
} else if (min < root.val && root.val < secondMin) {
secondMin = root.val;
}
dfs(root.left);
dfs(root.right);
}
}
class TreeNode {
int val;
TreeNode left, right;
public TreeNode(int val) {
this.val = val;
}
}
时间复杂度 O ( n ) O(n) O(n),空间 O ( h ) O(h) O(h)。