leetcode 671 二叉树中第二大的数

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;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值