[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))
}
复制代码
划线
评论
复制
发布于: 刚刚阅读数: 2
方勇(gopher)
关注
Dead or Alive. 生存战斗是知识的源泉! 2018.11.08 加入
我是一名SRE哨兵,目前是好大夫基础架构部高级工程师。专注于 SRE,微服务、中间件的稳定性和可用性建设,整体负责好大夫服务治理云平台的设计和搭建!
评论