/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func findSecondMinimumValue(root *TreeNode) int {
	if root == nil {
		return -1
	}
	return helper(root, root.Val)
}

func helper(root *TreeNode, min int) int {
	if root.Left == nil {
		return -1
	}
	var l, r int
	if root.Left.Val == min {
		l = helper(root.Left, min)
	} else {
		l = root.Left.Val
	}
	if root.Right.Val == min {
		r = helper(root.Right, min)
	} else {
		r = root.Right.Val
	}
	switch {
	case l == -1:
		return r
	case r == -1:
		return l
	case r < l:
		return r
	}
	return l
}