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

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

文档讲解:代码随想录

题目链接:. - 力扣(LeetCode)

遇到二叉搜索树,就要知道这棵树在中序遍历的情况下是一个升序的遍历。

这道题目的难点就是如何使用双指针遍历二叉树,一个指向中序遍历的正在遍历的节点,一个指向中序遍历前一个结点

在中序遍历过程中,遍历到的节点是不断递增的,相当于有一个指针是不断移动的,我们只要让另一个指针指向现在指针指向的指针就可以

如何确定递归函数有无返回值:有返回值的情况:返回二叉树是否符合某一特性或者某一结点的数值,遍历某条特定的路径,或是找到某一结点,本题是需要遍历整个二叉树所以无返回值

class Solution:
    def __init__(self):
        self.result = float("inf")
        self.pre = None
    def traversal(self,root):
        if not root:
            return 
        self.traversal(root.left) #向左遍历
        #中
        if self.pre is not None: 
            self.result = min(self.result,root.val - self.pre.val)
        self.pre = root
        #右
        self.traversal(root.right)
    def getMinimumDifference(self, root: Optional[TreeNode]) -> int:
        self.traversal(root)
        return self.result

501.二叉搜索树中的众数

文档讲解:代码随想录

题目链接:. - 力扣(LeetCode)

涉及到二叉搜索树,遍历顺序一定是中序遍历,中序遍历的才是一个升序数组。然后将处理逻辑放在中间,和上一个题的结构是一样的,在向左遍历和向右遍历中间写上处理代码。

难点:众数可能有多个

所以我们要对每个不一样的元素都初始化一个count,比较哪个count最大,并且如果有跟count一样大的其他元素对应的count,那么这两个元素都是众数

代码技巧①和上一题一样,也是使用双指针 ②定义两个频率变量,一个是当前遍历的元素的频率count,一个是所有的遍历过的元素的最高频率max_count  ③收获结果集:如果count和max_count 一样,就保存到结果集中 ④在遍历的过程中不断更新max_count,以及结果集

class Solution:
    

    def findMode(self, root: Optional[TreeNode]) -> List[int]:
        ###定义全局变量
        pre = None
        count = 0
        max_count = 0
        result = []
        def traversal(root):
            nonlocal pre, count, max_count, result
            if not root:
                return 
            traversal(root.left)
            #统计当前节点的频率
            if pre == None:
                count = 1
            else:
                if pre.val == root.val:
                    count +=1
                else:
                    count = 1
            #比较当前节点的频率和最大频率
            if count > max_count:
                max_count = count
                result = [root.val] #重置
            ###下面这个条件不可以写为if,这个条件和上面的是互斥的,如果写为if那么上面那个执行完之后,max_count = count了,下面的if条件还是会执行
            elif  count == max_count:
                result.append(root.val)
            ##不要忘记更新pre的值
            pre = root
            traversal(root.right)
        traversal(root)
        return result

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

文档链接:代码随想录

题目链接:. - 力扣(LeetCode)

审题:

  • 所有 Node.val 互不相同 。
  • p != q
  • p 和 q 均存在于给定的二叉树中。

如果找到一个节点,发现左子树出现结点p,右子树出现节点q,或者 左子树出现结点q,右子树出现节点p,那么该节点就是节点p和q的最近公共祖先。也就是我们要从下往上处理

 遍历是没有办法从下往上遍历的,但是处理顺序可以从下往上处理,后序遍历,左右中,便是从下往上处理。有递归就会有回溯,回溯的过程就会让我们从底往上去遍历

class Solution:
    def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
        if root == None or root.val == p.val or root.val == q.val: #如果一个节点是根节点,那么不论另一个节点在哪里,最近公共祖先都是该根节点
            return root
        left = self.lowestCommonAncestor(root.left,p,q)
        right = self.lowestCommonAncestor(root.right,p,q)

        if left and right:
            return root
        if left and not right:
            return left
        elif not left and right:
            return right
        else:
            return None

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/608181.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

5.9gunplot绘图堆叠柱状图

gunplot绘图堆叠柱状图 plot"要用的数据(后缀名是.dat)" using 2 t(或者title) 跟着是要命名的属性名称 这个名称可以用.dat里的每列列名,也可以直接在后面跟着定义 plot "data.dat" using 2 t columnheader(2), using 3 t column…

PLC数据采集网关的功能和特点-天拓四方

一、引言 随着工业自动化程度的不断提高,数据在生产线上的作用愈发重要。PLC作为工业自动化的核心设备,其数据采集和处理能力直接影响到整个生产线的效率和稳定性。而PLC数据采集网关,作为连接PLC与外部系统的桥梁,正日益受到人们…

vue3—win7搭建vue3环境

背景 vue3环境要求node.js18.3及以上版本,所以我们需要安装更高版本node.js,然而win7无法支持高版本node.js。下面我介绍一种安装方法。 步骤 1、下载 node-v13.14.0-x64.msi 安装,默认安装即可。安装完成后,进入cmd&#xff0c…

Hibernate认识

一、定义 Hibernate 是一种开源的 Java 对象关系映射 (ORM) 框架,用于将面向对象的领域模型持久化到关系数据库中。它为开发人员提供了一种简便的方法来操作数据库,而无需编写繁琐的 SQL 代码。 ORM(对象关系映射):Ob…

Linux 第二十章

🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C,linux 🔥座右铭:“不要等到什么都没有了…

提速25倍!MoonBit 新增后端支持,一周内成为热议焦点

MoonBit 新增 JS 后端支持 近期,MoonBit 迎来了重要更新:新增对 JavaScript 后端的支持,为用户带来了前所未有的性能提升。 MoonBit 诞生于2022年,是专为云计算及边缘计算设计的 AI 云原生编程语言及开发者平台。作为一门诞生于 …

Orange3数据可视化(小提琴图)

小提琴图 小提琴图和箱线图类似,用来显示数据分布和概率密度。结合了箱线图和密度图的特征,用来显示数据的分布形状。 输入 数据: 输入数据集 输出 选中的数据: 从图中选中的实例 数据: 增加了一列,显示数据点是否被选中 …

STM32--4G DTU 及 阿里云

模块概述 ATK-IDM750C/IDM751C 是正点原子(ALIENTEK)团队开发的一款高性能 4G Cat1 DTU 产品, 支持移动 4G、联通 4G 和电信 4G 手机卡。它以高速率、低延迟和无线数传作为核心功能, 可快速解决应用场景下的无线数传方案。 它支持 TCP/UDP/HTTP/MQTT/DN…

酷开科技AI技术支持,酷开系统根据你的喜好量身定制节目

在当今数字化时代,个性化推荐已成为提升消费者体验的关键因素。酷开科技的智慧AI,为消费者提供了精彩的内容推荐服务,更大地丰富了消费者的娱乐生活。 酷开系统中的AI推荐引擎通过学习消费者的观看习惯和偏好,能够快速识别其兴趣…

Python进行excel处理-01

最近干采购,每个月要对供应商的对账单,对对应的采购订单号和物料编号的价格和数量,是不是和物料管控总表里面的价格数量是不是一致,于是写了一个代码。 从总表里面找到,对账单里对应采购订单和物料编码的数据&#xf…

ACPI高级配置和电源接口规范概览

安全之安全(security)博客目录导读 目录 1 Overview 背景 What is ACPI ACPI初始化 2 Introduction 主要目标 Power management 基本原理 ACPI框架 Target Audience 3 术语 通用术语General ACPI Terminology 全局系统状态定义Global System State Definitions 设…

【全开源】JAVA智慧养老养老护理帮忙代办陪诊陪护小程序APP源码

一、特色功能 护理服务功能: 基础护理:提供日常生活中的基础护理服务,如洗漱、穿衣、进食等,用户可以通过小程序预约,由专业的护理人员上门提供服务。康复护理:针对术后康复或慢性病康复的老年人&#xf…

Ansys Mechanical|内嵌nCode疲劳仿真工具

疲劳分析是分析结构受到周期性载荷作用下,结构应力远小于强度极限情况,甚至结构应力比弹性极限还低的情况下就可能发生破坏的情况。Ansys nCode是国际著名的疲劳耐久性仿真分析软件,其多个版本以前已经可以和Ansys Mechanical进行无缝以进行联…

如果你这样使用电路仿真软件,你就无敌了!

在电子设计领域,电路仿真软件如同一把锋利的宝剑,掌握它,你就能在复杂的电子世界中游刃有余。今天,就让我们一起探讨如何高效利用电路仿真软件,让你在电子设计领域所向披靡! 一、熟悉软件界面与基础操作 …

Java文件与IO操作

1. 文件与IO操作 1.1 文件 什么是文件: 文件,对我们并不陌生,文件是保存数据的地方,比如大家经常使用的word文档,txt文件.excel文件...都是文件。它既可以保存一张图片,也可以保持视频,声音.… 1.1.1 文件流: 1.1.2 常用的文件操作: 创建文件对象相关构造器和方法: 案例&a…

从C向C++16——常见容器2

一.stack容器 1.stack理解 概念: stack是一种先进后出的数据结构,它只有一个出口。 它在C中也叫栈,类似于我们在《数据结构和算法》里面的栈,只不过在C中把其封装成库,我们可以直接使用。 注意:栈中只有…

【因特网中自治系统内部的路由选择,RIP 进程处理 OSPFOSPF(Open Shortest Path First)最短路径优先协议】

文章目录 因特网中自治系统内部的路由选择RIP(Routing Information Protocol)内部网关协议RIP通告(advertisements)RIP: 链路失效和恢复RIP 进程处理OSPF(Open Shortest Path First)最短路径优先协议OSPF “高级” 特性(在RIP中的…

C++ 继承篇

面向对象语言的三大特性:封装,继承和多态 根据目前学到的知识,对于封装的理解,大致有两层: 将数据和方法封装,不想让外面看到用private/protected修饰,想让外面看到用public修饰类型的行为不满…

Mybatis 源码分析

《黑马架构师_源码系列-主流框架&中间件》-- MyBatis (讲师:子慕) * 手写持久层框架-仿写mybatis * Mybatis架构设计&主要组件 * Mybatis如何完成的初始化? * Mybatis如何完成的sql解析及执行? * Mybatis如何设置的参数? * Mybat…
最新文章