写点什么

[Day31-02]-[二叉树] 二叉搜索树节点最小距离

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

    阅读完需:约 2 分钟

783. 二叉搜索树节点最小距离

给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。

差值是一个正数,其数值等于两值之差的绝对值。

 

示例 1:


输入:root = [4,2,6,1,3]输出:1
复制代码

示例 2:


输入:root = [1,0,48,null,null,12,49]输出:1
复制代码

题解:

func TestMinDiffInBST(t *testing.T) {	// [49,52,60,89,90]	root := &TreeNode{ // 初始化一棵树		Val: 90,		Left: &TreeNode{			Val: 60,			Left: &TreeNode{				Val: 49,				Right: &TreeNode{					Val: 52,				},			},			Right: &TreeNode{				Val: 89,			},		},	}	var minDiffInBST func(root *TreeNode) int	// 题解 关键部分是 升序数组中最小差值一定是两个相邻数字的差值	// 我们知道采用中序遍历可以得到BST的升序数组	// 用一个pre记录前面一个节点的Val,如果和当前节点的Val差值小于ans,则更新ans	var ans, pre = math.MaxInt, -1 // 初始化ans,pre	var dfs func(root *TreeNode)	dfs = func(root *TreeNode) {		if root == nil { // 当递归完成后退出			return		}
// LDR 升序 dfs(root.Left) // 处理逻辑 更新ans的值 if pre != -1 && ans > root.Val-pre { ans = root.Val - pre } // 记录上一个节点的Val pre = root.Val dfs(root.Right) } minDiffInBST = func(root *TreeNode) int { dfs(root) if ans == math.MaxInt { return 0 } return ans } t.Log(minDiffInBST(root))}
复制代码


用户头像

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

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

评论

发布
暂无评论
[Day31-02]-[二叉树]二叉搜索树节点最小距离_LeetCode_方勇(gopher)_InfoQ写作社区