题目大意
给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 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%。