int res =-1;
public int findSecondMinimumValue(TreeNode root) {
if (root == null) {
return res;
}
//如果存在子树并且值不相等,那么较大的值就有可能是第二小的
if (root.left != null && root.left.val != root.right.val) {
//获取左右子树中将较大的值
int bigger = root.left.val > root.right.val ? root.left.val : root.right.val;
//如果返回值没有被更改过,则bigger有可能就是第二小的,如果返回值被更改过,则比较当前的res和bigger哪个更小
res = res == -1 ? bigger:Math.min(res, bigger);
//将左右子树中值更小的树进行递归,查找是否有更小的值(即为了上一步判断)
findSecondMinimumValue(root.left.val > root.right.val ? root.right : root.left);
}
//如果左右子树相等或为空,分别递归
}else {
findSecondMinimumValue(root.left);
findSecondMinimumValue(root.right);
}
return res;
}
leetcode 671 二叉树中第二大的数
最新推荐文章于 2021-04-13 08:47:40 发布