给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2或 0。如果一个节点有两个子节点的话,那么这个节点的值不大于它的子节点的值。
给出这样的一个二叉树,你需要输出所有节点中的第二小的值。如果第二小的值不存在的话,输出 -1 。
示例 1:
1 2 3 4 5 6
| 输入: 2 / \ 2 5 / \ 5 7 输出: 5 说明: 最小的值是 2 ,第二小的值是 5 。
|
示例 2:
1 2 3 4
| 输入: 2 / \ 2 2 输出: -1 说明: 最小的值是 2, 但是不存在第二小的值。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
class Solution { int min = -1; int subMin = -1;
public int findSecondMinimumValue(TreeNode root) { if (root == null) return -1; if (min == -1) min = root.val; else if ((subMin==-1 && root.val!=min) ||(root.val < subMin && root.val > min)) subMin = root.val; findSecondMinimumValue(root.left); findSecondMinimumValue(root.right); return subMin; } }
|
这道题一开始我看成求第二大,这里是第二小..
根节点肯定最小,所以只要记录根节点值,然后遍历查找,大于根节点的最小值即可..
还是笨,边看游戏边写一大早上才一题t.t