Leetcode No.671二叉树中第二小的节点

题目大意

给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0。如果一个节点有两个子节点的话,那么该节点的值等于两个子节点中较小的一个。
给出这样的一个二叉树,你需要输出所有节点中的第二小的值。如果第二小的值不存在的话,输出 -1 。
示例1:

image.png

示例2:
image.png

题目分析

这题应该注意,如果根节点有两个孩子,它一定是最小的那个节点。所以最小的一定是根节点,然后我们可以递归地寻找左子树最小的节点l,右子树最小的节点r。l和r中更小的那个就是我们需要返回的值。

代码

public int findSecondMinimumValue(TreeNode root) {
        return help(root,root.val);
    }
    private int help(TreeNode root,int min) {
        if(root == null) return -1;
        if(root.val > min) return root.val;
        int left = help(root.left,min);
        int right = help(root.right,min);
        if(left == -1) return right;
        if(right == -1) return left;
        return Math.min(left,right);
    }

运行时间0ms,击败100%。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。