当前位置: 首页 > article >正文

力扣二叉树--第三十七天

前言

废话不多说,能学到东西!功不唐捐!

内容

一、二叉搜索树的最小绝对差

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

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

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

中序遍历

中序遍历将值保存在一个数组中再进行遍历求解

func getMinimumDifference(root *TreeNode) int {
   
   res:=dfs(root)
   var val []int
    for 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.MaxInt64
   var 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=root
      dfs(root.Right)
  }
  dfs(root)
  return min
}

最后

学习使人快乐!掌控感让人舒适!学无止境!


http://www.kler.cn/a/156500.html

相关文章:

  • 【数据结构】AVL树
  • ubuntu20.04 colmap 安装2024.11最新
  • FFmpeg 4.3 音视频-多路H265监控录放C++开发十三.2:avpacket中包含多个 NALU如何解析头部分析
  • 准确率调整研究中心
  • 代码随想录第二十一天| 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树
  • 车-路-站-网”信息耦合的汽车有序充电
  • Flutter PK jetpack compose区别和选择
  • 无人机智慧工地:助力工地管理的未来之选
  • 改进LiteOS中物理内存分配算法(详细实验步骤+相关源码解读)
  • ProgrammingError: nan can not be used with MySQL
  • 唯创知音WT588F02A-16S录音语音芯片在宠物喂食器中的应用:小芯片,大功能
  • 【python】——函数
  • 合成相机模型【图形学】
  • 机器人制作开源方案 | 校园餐具回收分类机器人
  • 群晖NAS配置之搭建WordPress个人博客站点
  • ❀My学习Linux命令小记录(7)❀
  • 【JVM系列】Class文件分析
  • 蓝桥杯每日一题2023.12.3
  • el-select多选multiple数据无法删除,回显成功,但无法编辑,选中和删除都没反应
  • C++类的定义和使用
  • 单个 Zip 文件体积超过 40GB
  • 二蛋赠书十期:《剪映短视频剪辑从入门到精通》
  • 天翼云:“百万IOPS”助推政企上云
  • 理解 Python 的 for 循环
  • 颠覆性语音识别:单词级时间戳和说话人分离
  • nodejs的安装和验证