/** * 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 }