671.二叉树中第二小的节点

72 阅读1分钟

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