前言
废话不多说,能学到东西!功不唐捐!
内容
一、二叉搜索树的最小绝对差
530. 二叉搜索树的最小绝对差
给你一个二叉搜索树的根节点 root
,返回 树中任意两不同节点值之间的最小差值 。
差值是一个正数,其数值等于两值之差的绝对值。
中序遍历
中序遍历将值保存在一个数组中再进行遍历求解
func getMinimumDifference(root *TreeNode) int {res:=dfs(root)var val []intfor i:=0;i<len(res)-1;i++{val=append(val,res[i+1]-res[i])}return findMin(val)}
func findMin(nums []int)int{min:=nums[0]for _,v:=range nums{if v<min{min=v}}return min
}
// func findMin(nums []int)int{
// min:=nums[0]
// for i:=0;i<len(nums)-1;i++{
// if nums[i+1]<min{//第一遍写这个竟然写错了没发现
// min=nums[i+1]
// }
// }
// return min
// }func dfs(root *TreeNode)(res []int){if root==nil{return }res=append(res,dfs(root.Left)...) res=append(res,root.Val)res=append(res,dfs(root.Right)...)return
}
在中序遍历的过程中用 pre变量保存前驱节点的值,这样即能边遍历边更新答案,不再需要显式创建数组来保存。
func getMinimumDifference(root *TreeNode)int{var prev *TreeNode// 保留前一个节点的指针min:=math.MaxInt64//var min math.MaxInt64 math.MaxInt64 是一个常量,表示 64 位有符号整数的最小值。你不能直接使用 var min math.MaxInt64 这样的代码来定义一个变量并将其赋值为 math.MaxInt64var dfs func(root *TreeNode)dfs=func (root *TreeNode){if root==nil{return }dfs(root.Left)if prev!=nil&&root.Val-prev.Val<min{min=root.Val-prev.Val}prev=rootdfs(root.Right)}dfs(root)return min
}
最后
学习使人快乐!掌控感让人舒适!学无止境!