代码随想录刷题第21天|530.二叉树的最小绝对差值

文章讨论了如何在二叉树结构中计算节点值的最小绝对差值,以及如何在二叉搜索树中寻找众数(出现次数最多的值)。两种方法分别涉及中序递增遍历和使用迭代或递归策略。
摘要由CSDN通过智能技术生成

530.二叉树的最小绝对差值

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def __init__(self):
        self.vec=[]
    def traversal(self,root):
        if root is None:
            return
        self.traversal(root.left)
        self.vec.append(root.val)
        self.traversal(root.right)

    def getMinimumDifference(self, root: Optional[TreeNode]) -> int:
        self.vec=[]
        self.traversal(root)
        if len(self.vec)<2:
            return 0
        result=float('inf')
        for i in range(1,len(self.vec)):
            result=min(result,self.vec[i]-self.vec[i-1])
        return result

        

利用中序递增,找到该树最小值 

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def __init__(self):
        self.result=float('inf')
        self.pre=None
        
    def traversal(self,cur):
        if cur is None:
            return
        self.traversal(cur.left)
        if self.pre is not None:
            self.result=min(self.result,cur.val-self.pre.val)
        self.pre=cur#记录前一个
        self.traversal(cur.right)

        

    def getMinimumDifference(self, root: Optional[TreeNode]) -> int:
        self.traversal(root)
        return self.result
        

        
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:#迭代
    def getMinimumDifference(self, root: Optional[TreeNode]) -> int:
        stack =[]
        cur=root
        pre=None
        result=float('inf')

        while cur is not None or len(stack)>0:
            if cur is not None:
                stack.append(cur)
                cur=cur.left
            else:
                cur=stack.pop()
                if pre is not None:
                    result=min(result,cur.val-pre.val)
                pre=cur
                cur=cur.right
        return result
        

        

501.二叉搜索树中的众树

如果不是二叉搜索树,把这树遍历,然后用map统计概率

法一 利用字典

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
from collections import defaultdict
class Solution:
    def searchBST(self,cur,freq_map):
        if cur is None:
            return
        freq_map[cur.val]+=1
        self.searchBST(cur.left,freq_map)
        self.searchBST(cur.right,freq_map)
    def findMode(self, root: Optional[TreeNode]) -> List[int]:
        freq_map=defaultdict(int)
        result=[]
        if root is None:
            return result
        self.searchBST(root,freq_map)
        max_freq=max(freq_map.values())
        for key,freq in freq_map.items():
            if freq==max_freq:
                result.append(key)
        return result

利用二叉搜索树性质

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值