leetcode-530 二叉搜索树的最小绝对差
给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。
差值是一个正数,其数值等于两值之差的绝对值。
示例 1:
输入:root = [4,2,6,1,3]
输出:1
示例 2:
输入:root = [1,0,48,null,null,12,49]
输出:1
提示:
- 树中节点的数目范围是 [2, 104]
- 0 <= Node.val <= 105
go实现:
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
// 利用二叉搜索树中序遍历有序的特性,比较相邻节点差值
func getMinimumDifference(root *TreeNode) int {
// 初始化最小差值为最大整数
minDiff := math.MaxInt32
// 使用指针保存前驱节点的值,确保在递归调用间保持状态,初始为nil表示尚未设置,这样处理第一个节点时不会计算差值
var prev *int
// 定义闭包实现中序遍历
var inorder func(node *TreeNode)
inorder = func(node *TreeNode) {
if node == nil {
return
}
// 递归处理左子树(BST的较小值部分)
inorder(node.Left)
// 核心比较逻辑
if prev != nil {
// 计算当前节点值与前驱节点值的绝对差,由于中序遍历保证升序,直接相减即可得到正差值
currentDiff := node.Val - *prev
// 更新最小差值(由于中序有序,不需要取绝对值)
if currentDiff < minDiff {
minDiff = currentDiff
}
}
// 更新前驱节点指针为当前节点值(关键:跨递归保持状态)
prev = &node.Val
// 递归处理右子树(BST的较大值部分)
inorder(node.Right)
}
// 启动中序遍历
inorder(root)
return minDiff
}
本文作者:505donkey
本文链接:https://www.cnblogs.com/505donkey/p/18625326
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步