LeetCode 530. 二叉搜索树的最小绝对差

题目链接:LeetCode 530. 二叉搜索树的最小绝对差

题意:

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

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

解题思路:

递归法1

既然是二叉搜索树,那么中序遍历一定是有序的,因此最小的插值一定出现在相邻的两个结点之间,因此先中序遍历得到所有结点值的数组,然后求数组中相邻的两个数之间差值的最小值。

递归代码:

var vals []int 
func getMinimumDifference(root *TreeNode) int {
    vals = []int{}
    dfs(root)
    res  := math.MaxInt
    for i:=1;i<len(vals);i++{
        if vals[i] - vals[i-1] < res {
            res = vals[i] - vals[i-1]
        }
    }
    return res
}
func dfs(root *TreeNode){
     if root == nil{
        return 
    }
    dfs(root.Left)
    vals = append(vals,root.Val)
    dfs(root.Right)
}

递归法2

中序遍历中,记录最小值

// 中序遍历的同时计算最小值
func getMinimumDifference(root *TreeNode) int {
    // 保留前一个节点的指针
    var prev *TreeNode
    // 定义一个比较大的值
    min := math.MaxInt64
    var travel func(node *TreeNode)
    travel = func(node *TreeNode) {
        if node == nil {
            return 
        }
        travel(node.Left)
        if prev != nil && node.Val - prev.Val < min {
            min = node.Val - prev.Val
        }
        prev = node
        travel(node.Right)
    }
    travel(root)
    return min
}
posted @ 2023-05-29 18:25  小星code  阅读(18)  评论(0)    收藏  举报