题目链接: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
}
标签:node,TreeNode,travel,二叉,530,prev,root,LeetCode
From: https://www.cnblogs.com/lxing-go/p/17441322.html