LEETCODE-DAY21

本文介绍了如何使用二叉搜索树的特性解决三个问题:计算最小绝对差、找到二叉树中的众数以及求最近公共祖先。通过中序遍历将二叉搜索树转化为递增数组,简化了算法实现。同时提到两种方法:暴力解法和简便解法,涉及时间复杂度分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


title: LEETCODE-DAY21
date: 2024-03-12 15:14:32
tags:

今日内容:530.二叉搜索树的最小绝对差 、501.二叉搜索树中的众数 、236. 二叉树的最近公共祖先

知识点:二叉搜索树等价于中序遍历结果为递增数组

T1

class Solution:
    def getMinimumDifference(self, root: Optional[TreeNode]) -> int:
        q=deque()
        if not root:
            return 0
        res=root.val
        q.append(root)
        while q:
            temp=q.pop()
            if temp.right:
                q.append(temp.right)
                res=min(res,abs(temp.right.val-temp.val))
            if temp.left:
                q.append(temp.left)
                res=min(res,abs(temp.left.val-temp.val))
        return res

输入
root =
[1,null,5,3]
输出
1
预期结果
2

class Solution:
    def getMinimumDifference(self, root: Optional[TreeNode]) -> int:
        q=deque()
        if not root:
            return 0
        res=float('inf')
        q.append(root)
        while q:
            temp=q.pop()
            if temp.right:
                q.append(temp.right)
                res=min(res,abs(temp.right.val-temp.val))
            if temp.left:
                q.append(temp.left)
                res=min(res,abs(temp.left.val-temp.val))
        return res

输入
root =
[236,104,701,null,227,null,911]
输出
123
预期结果
9

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

二叉搜索树与中序遍历搭配有奇效。

T2

Python | Get key from value in Dictionary

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

    def findMode(self, root: Optional[TreeNode]) -> List[int]:
        Tra=self.inorder(root)
        res=list()
        table=dict()
        for i in Tra:
            table[i]=table.get(i,0)+1
        
        value_list=list(table.values())
        
        key_list=list(table.keys())

        for key,value in table.items():
            if value==max(value_list):
                res.append(key)
        
        return res

暴力解法,时间复杂度高

简便解法后补(可以在遍历的同时就统计出现频率)


T3

class Solution:
    def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
        if not root or root==q or root==p:
            return root
        left=self.lowestCommonAncestor(root.left,p,q)
        right=self.lowestCommonAncestor(root.right,p,q)
        if left and right:
            return root
        if not left and right:
            return right
        elif left and not right:
            return left

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值