题目:
给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0。如果一个节点有两个子节点的话,那么该节点的值等于两个子节点中较小的一个。
更正式地说,即 root.val = min(root.left.val, root.right.val) 总成立。
给出这样的一个二叉树,你需要输出所有节点中的 第二小的值 。
如果第二小的值不存在的话,输出 -1 。
算法:
方法一:DFS
rootval是整个数的最小值,找到比rootval大的最小值即是结果
func findSecondMinimumValue(root *TreeNode) int {
ans := -1
rootVal := root.Val
var dfs func(node *TreeNode)
dfs = func(node *TreeNode) {
if node == nil {
return
}
// 还没找到ans或者已经有了ans,但还能找到更小的ans
if ans == - 1 || node.Val < ans {
if node.Val > rootVal{
ans = node.Val
return
}
dfs(node.Left)
dfs(node.Right)
}
}
dfs(root)
return ans
}