Believing Process 力扣671.二叉树中第二小的节点

14 篇文章 0 订阅

题干:

给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0。如果一个节点有两个子节点的话,那么该节点的值等于两个子节点中较小的一个。

更正式地说,root.val = min(root.left.val, root.right.val) 总成立。

给出这样的一个二叉树,你需要输出所有节点中的第二小的值。如果第二小的值不存在的话,输出 -1 。

示例:

输入:root = [2,2,5,null,null,5,7]
输出:5
解释:最小的值是 2 ,第二小的值是 5 。

 

class Solution {
    private int ans = -1;
    public int findSecondMinimumValue(TreeNode root) {
       dfs(root,root.val);
       return ans;
    }
    public void dfs(TreeNode root,int cur){
        if(root==null) return;
        if(root.val!=cur){
            if(ans==-1) ans = root.val;
            else Math.min(ans,root.val);
            return ;
        }
        dfs(root.left,cur);
        dfs(root.right,cur);
        return;
    }
}

        深度优先遍历整个树,遇到某个结点的值和根结点不一样则判断ans是否第一次赋值,是第一次就直接赋值,不是第一次就保留ans和当前结点值的较小者,然后直接返回,因为题干说root.val = min(root.left.val, root.right.val) 总成立,故当前结点下的结点的值始终会不小于当前结点的值,而我们要找的是第二小的值,所以没有必要往下继续dfs。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值