力扣算法刷题Day21 |二叉树:二叉搜索树的最小绝对差 二叉搜索树中的众数 二叉树的最近公共祖先

力扣题目:#530.二叉搜索树的最小绝对差 

刷题时长:10min

解题方法:递归+双指针

复杂度分析

  • 时间O(n)
  • 空间O(n)

问题总结

  • 双指针移动

本题收获

  • 遇到在二叉搜索树上求什么最值啊,差值之类的,就把它想成在一个有序数组上求最值,求差值,这样就简单多了
  • 利用float(‘inf')给变量预赋最大值

力扣题目:#501.二叉搜索树中的众数

刷题时长:40min

解题方法:递归

复杂度分析

  • 时间O(n)
  • 空间O(n)

问题总结

  • debug半天发觉是变量拼写错误,其中一个maxcnt硬是写成了maxcut没看出来

本题收获

  • 解题思路:利用BST性质+中序遍历,遍历过程中即可更新cnt和maxcnt
  • 变量作用域关键词 global vs nonlocal
    • global全局变量:变量定义在函数外部的时候,如果函数里面想改变这个全局变量的值,需要在当前的引用函数里面重新定义一个变量 并用关键字global修饰。
    • nonlocal非全局变量:在函数的函数里面使用函数的变量。

力扣题目:#236. 二叉树的最近公共祖先  

刷题时长:15min 参考视频

解题方法:递归(后序遍历)

复杂度分析

  • 时间O(n)
  • 空间O(n)

问题总结

  • 解题思路不清
  • 单层递归逻辑把左右都为空的情况分错类给return root了,应return左右任意None

本题收获

  • 解题思路:情况1)p 和 q 的祖先需往上搜索;情况2)p 和 q 某一个结点本身就是祖先
    • 返回条件:1) 遍历到空结点 返回None;2)当遇到p或q的其中一个结点,直接返回该结点
    • 左右递归
    • 中,接到左右递归传来的值进行处理
      • 左右子树都不为空,则左右子树分别存在一个p或p,就返回 中 ,此时中为祖先
      • 左为空,右不为空,就向上返回 右;反之左不为空,右为空,就返回 左
      • 左右都为空,则中的孩子没有p或q,就返回None
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值