首页 > 编程语言 >代码随想录算法训练营day18 |530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树的最近公共祖先

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

时间:2024-10-18 22:10:41浏览次数:8  
标签:None right val self 随想录 二叉 搜索 root left

学习资料:https://programmercarl.com/0530.二叉搜索树的最小绝对差.html

530.二叉搜索树的最小绝对差(双指针法,pre&cur,设置最小差值初始为无穷大,当差值<最小差值就更新最小差值)

点击查看代码
# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def __init__(self):
        self.result = float('inf')  # 设置最小值的初值为无穷大
        self.pre = None
    def getMinimumDifference(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        if root is None:
            return
        self.getMinimumDifference(root.left)
        # 因为中序遍历,这里root.val肯定大于self.pre.val
        if self.pre is not None:
            self.result = min(self.result, root.val-self.pre.val) 
        self.pre = root
        self.getMinimumDifference(root.right)
        return self.result

        

501.二叉搜索树中的众数(加两个函数,init & searchBST;双指针,当pre.val==cur.val,count+=1)

点击查看代码
# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def __init__(self):
        self.result = []
        self.pre = None
        self.count = 0
        self.maxCount = 0
    
    def searchBST(self, cur):
        if cur is None:
            return
        
        self.searchBST(cur.left)
        if self.pre is None:
            self.count = 1
        elif self.pre.val == cur.val:
            self.count += 1
        else:
            self.count = 1
        self.pre = cur

        if self.count == self.maxCount:
            self.result.append(cur.val)
        if self.count > self.maxCount:
            self.maxCount = self.count
            self.result = [cur.val]
        self.searchBST(cur.right)
        return

    def findMode(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        self.count = 0
        self.maxCount = 0
        self.pre = None
        self.result = []

        self.searchBST(root)
        return self.result
        
        

236.二叉树的最近公共祖先(看代码简单,但是想不通;递归;左右中:后序遍历)

点击查看代码
# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def lowestCommonAncestor(self, root, p, q):
        """
        :type root: TreeNode
        :type p: TreeNode
        :type q: TreeNode
        :rtype: 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
        

PS:今天的后两道题没看懂,先抄一下
延迟了一天,因为昨晚有今年最大的月亮又恰逢难得的晴天,看到了月球超级靓但是还是差点意思没看到凹,不过第一次看到土星,好远好小好棒,还有环,就是没注意颜色
昨天还吃了美味寿司,一个人干了两大碟,有实力儿
破公司的秋招,把人当猴耍

标签:None,right,val,self,随想录,二叉,搜索,root,left
From: https://www.cnblogs.com/tristan241001/p/18475141

相关文章

  • 代码随想录算法训练营第三天|203.移除链表元素,707.设计链表,206.反转链表
    1前言今日主要学习链表的基础leetcode203移除链表元素leetcode707设计链表leetcode206反转链表2链表的基础链表分为单链表和双链表,与字符串的区别就是链表是在一个里面存储了数据+下一个数据的内存地址链表中存储的内存空间是可以不连续的2.1链表的定义2.1.1......
  • 代码随想录算法训练营 | 115.不同的子序列,583. 两个字符串的删除操作,72. 编辑距离
    115.不同的子序列题目链接:115.不同的子序列文档讲解︰代码随想录(programmercarl.com)视频讲解︰不同的子序列日期:2024-10-18想法:dp[i][j]表示以s[i-1],t[j-1]结尾的s,t自学列中满足s的子序列为t的个数,如果s[i-1],t[j-1]相等,那么个数应该跟双方上一个结尾状态dp[i-1][j-......
  • 二叉查找树和笛卡尔树
    目录二叉查找树定义作用操作查找插入删除缺点笛卡尔树定义操作构造二叉查找树定义​ 二叉查找树(BinarySearchTree,BST),又名二叉搜索树或二叉排序树。​ 它是一类特殊规定的二叉树,它应当满足以下条件:每个节点有唯一确定的权值非叶子节点的权值比其左子树中所有节点权值大非......
  • 图论之搜索遍历
    前言一个重要的板块,倒是有很多有趣的题,从搜索开始吧MazeTacToeS暴力即可,\(3^9\times25\times25\)绰绰有余,把状态转换为三进制\(dfs\)ConnectedComponents?根据鸽巢原理,必定有一个点被割去的边\(\le\frac{m}{n}\),然后我们找到这个点,对于连接他的边均在同一个联......
  • 二叉树和度为二的有序树的区别
    一、定义与结构度为二的有序树:在这种树结构中,每个节点最多有两个子节点。子节点的顺序是重要的,即使两个子节点的值相同,只要他们的位置不同,他们就被视为是不同的子节点。当一个节点只有一个子节点时,该子节点的位置(左或右)并无特定要求,也即无需区分其左右次序。二叉树:二叉树......
  • RRT*路径搜索算法matlab代码
    一、算法简介      RRT*路径搜索算法相比于RRT路径搜索算法多了重选父节点和重布线的过程:二、实现效果对比(比RRT算法更光滑) RRT路径搜索算法实现效果RRT*路径搜索算法实现效果三、代码完整代码私聊!......
  • 信息收集-IP查询和利用搜索引擎收集
    IP查询IP地址定位:高精度IP定位4-openGPS.cn利用搜索引擎搜集信息建议用bing搜索语法:关键词:关键内容索引描述inurl:搜索包含指定url的网页intitle:限制搜索的网页标题intext:只搜索网页部分包含的文字(忽略标题、url)site:限制搜索想要的域名filetyp......
  • 【智能算法应用】引力搜索算法求解二维路径规划问题
    摘要引力搜索算法(GSA)是一种基于引力学说的启发式算法,用于解决复杂的优化问题。本文应用GSA于二维路径规划问题,通过优化路径来避开障碍物并达到目标点。实验结果表明,GSA在路径规划中具有良好的表现,尤其在多障碍场景中,其优化路径平滑且避障效果显著。理论引力搜索算法是......
  • 搜索,问题 I: 围成面积
    题目描述编程计算由“*”号围成的下列图形的面积。面积计算方法是统计*号所围成的闭合曲线中水平线和垂直线交点的数目。如下图所示,在10×10的二维数组中,有“*”围住了15个点,因此面积为15。 输入10×10的图形。输出输出面积。样例输入 复制0000000000000......
  • 推断二叉树(进阶)
    Description给出一棵二叉树的中序遍历和每个节点的父节点,求这棵二叉树的先序和后序遍历。Input输入第一行为一个正整数n表示二叉树的节点数目,节点编号从1到n,其中1为根节点。第2行有n个数字,第i个数字表示i的父亲节点。(1的父亲节点为0,表示无)第3行为中......