写点什么

[Day30]-[二叉树] 第二小的值

作者:方勇(gopher)
  • 2022 年 4 月 29 日
  • 本文字数:644 字

    阅读完需:约 2 分钟

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

给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0。如果一个节点有两个子节点的话,那么该节点的值等于两个子节点中较小的一个。

更正式地说,即 root.val = min(root.left.val, root.right.val) 总成立。

给出这样的一个二叉树,你需要输出所有节点中的 第二小的值 

如果第二小的值不存在的话,输出 -1 

 

示例 1:


输入:root = [2,2,5,null,null,5,7]输出:5解释:最小的值是 2 ,第二小的值是 5 。
复制代码

示例 2:


输入:root = [2,2,2]输出:-1解释:最小的值是 2, 但是不存在第二小的值。
复制代码


func TestFindSecondMinimumValue2(t *testing.T) {	// 根节点是最小的,后面再取一个次小的即可	var root = &TreeNode{		Val: 1,		Left: &TreeNode{			Val: 2,			Left: &TreeNode{				Val: 3,			},			Right: &TreeNode{				Val: 4,			},		},		Right: &TreeNode{			Val: 2,		},	}	var ans = -1	var solution func(root *TreeNode) int	var dfs func(root *TreeNode, res int)	dfs = func(root *TreeNode, res int) {		// 如果遍历结束,或者ans已经取到第二小的值了,并且其他节点大于小于ans 就返回ans		if root == nil || (ans != -1 && root.Val >= ans) {			return		}		// 取第二小		if res < root.Val {			ans = root.Val		}		dfs(root.Left, res)		dfs(root.Right, res)	}	solution = func(root *TreeNode) int {		dfs(root, root.Val)		return ans	}
t.Log(solution(root))}
复制代码


用户头像

Dead or Alive. 生存战斗是知识的源泉! 2018.11.08 加入

我是一名SRE哨兵,目前是好大夫基础架构部高级工程师。专注于 SRE,微服务、中间件的稳定性和可用性建设,整体负责好大夫服务治理云平台的设计和搭建!

评论

发布
暂无评论
[Day30]-[二叉树]第二小的值_LeetCode_方勇(gopher)_InfoQ写作社区