代码随想录算法训练营第二十一天 | 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树的最近公共祖先

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

https://programmercarl.com/0501.%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E4%B8%AD%E7%9A%84%E4%BC%97%E6%95%B0.html
牢记二叉搜索树是有序的!!!

class Solution:
    def getMinimumDifference(self, root: Optional[TreeNode]) -> int:
        ordered = self.convert2array(root)
        min_diff = float('inf')
        for i in range(len(ordered)):
            if i < len(ordered)-1:
                min_diff = min(abs(ordered[i+1] - ordered[i]), min_diff)
        return min_diff
  
    def convert2array(self,root):
        if not root:
            return []
        left = self.convert2array(root.left)
        right = self.convert2array(root.right)
        return left + [root.val] + right

501.二叉搜索树中的众数

https://programmercarl.com/0501.%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E4%B8%AD%E7%9A%84%E4%BC%97%E6%95%B0.html

class Solution:
    def findMode(self, root: Optional[TreeNode]) -> List[int]:
        ordered = self.convert2array(root)
        most = 0
        result = []
        for i in range(len(ordered)):
            cur = sum([1 for j in ordered[i+1:] if j == ordered[i]])
            if cur == most:
                result.append(ordered[i])
            elif cur > most:
                most = cur
                result = [ordered[i]]
        return result

    def convert2array(self,root):
        if not root:
            return []
        left = self.convert2array(root.left)
        right = self.convert2array(root.right)
        return left + [root.val] + right

236. 二叉树的最近公共祖先

https://programmercarl.com/0236.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E6%9C%80%E8%BF%91%E5%85%AC%E5%85%B1%E7%A5%96%E5%85%88.html#%E5%85%B6%E4%BB%96%E8%AF%AD%E8%A8%80%E7%89%88%E6%9C%AC

class Solution:
    def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
        if root == q or root == p or root is None:
            return root
        left = self.lowestCommonAncestor(root.left, p, q)
        right = self.lowestCommonAncestor(root.right, p, q)
  
        if left is not None and right is not None:
            return root
  
        if left is None and right is not None:
            return right
        elif left is not None and right is None:
            return left
        else:
            return None
  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值