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

2024-01-04

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

在这里插入图片描述
本题思路 :看到二叉搜索树,我们可以知道,它的中序遍历的有序的。并且是单调递增。如下图所示 在这里插入图片描述

然后我们就可以计算出相隔的两个数之间的差值,然后找到最小的那一个即可 在这里插入图片描述
定义一个初始为 min = 第二个元素 - 第一个元素。然后从第三个元素开始计算,如果发现差值 小于等于 min,就替换 min,遍历结束后,就得到了最小的 min 在这里插入图片描述

看到搜索树,我们要想到中序遍历的结果,是有序的。

class Solution {
    public int getMinimumDifference(TreeNode root) {
        List<Integer> list = new ArrayList();
        inorder(root,list);
        int min = list.get(1)-list.get(0);
        for(int i = 1; i < list.size(); i++){
            if((list.get(i) - list.get(i-1)) <= min){
                min = (list.get(i) - list.get(i-1));
            }
        }
        return min;
    }
    public void inorder(TreeNode root, List<Integer> list){
        if(root == null){
            return;
        }
        inorder(root.left,list);
        list.add(root.val);
        inorder(root.right,list);
    }
}

LeetCode 501 二叉搜索树中的众数

在这里插入图片描述
本题思路 : 这道依旧是通过中序遍历,得到一个有序的列表,如下图所示
在这里插入图片描述
然后通过一个 map 集合,将每个数,出现过的次数存起来,Key:值本身,Value:出现的次数
在这里插入图片描述
然后通过一个队列,将出现次数大的放进去,并且相同的放进去。如果遇到更大的,就清空原来的队列,放入新的大元素。
在这里插入图片描述

class Solution {
    public int[] findMode(TreeNode root) {
        List<Integer> list = new ArrayList();
        inorder(root,list);
        Map<Integer,Integer> hashMap = new HashMap();
        for(int i = 0; i < list.size(); i++){
            hashMap.put(list.get(i),hashMap.getOrDefault(list.get(i),0) + 1);
        }
        Deque<Integer> deque = new ArrayDeque();
        int max = -1;
        for(Map.Entry<Integer,Integer> map : hashMap.entrySet()){
            int key = map.getKey();
            int value = map.getValue();
            if( value == max){
               deque.addLast(key); 
            }
            if( value > max){
                deque.clear();
                deque.addLast(key);
                max = value;
            }
        }
        int[] ans = new int[deque.size()];
        for(int i = 0; i < ans.length; i++){
            ans[i] = deque.removeFirst();
        }
        return ans;
    }

    public void inorder(TreeNode root, List<Integer> list){
    if(root == null){
        return;
    }
    inorder(root.left,list);
    list.add(root.val);
    inorder(root.right,list);
    }
}

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

在这里插入图片描述
本题思路 :找最近的公共祖先,那么应该是自底向上来寻找。所以我们可以用后序遍历来完成。

  • 递归的第一步就是找出口,有以下几种情况
    • 第一种情况,root 为空节点的时候,直接返回 null 即可
    • 第二种情况如下图,root == q || root = p,直接返回 root,找到了 在这里插入图片描述
  • 然后就开始在 root(节点2) 的左树中,查找是否有 p 或者 q,假设如下图情况所示,
    • 此时 root.left == q,直接返回 q 在这里插入图片描述
  • 然后开始在 root(节点2)的右树中,查找是否有 p 或者 q,假设如下图所示
    • 此时 root.right == p,直接返回 p 在这里插入图片描述
  • 最后 left 和 right 都不为空,直接返回 root,节点二就是最近的公共祖先
class Solution {
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        if(root == null){
            return  root;
        }
        if(root == p || root == q){
            return root;
        }
        TreeNode left = lowestCommonAncestor(root.left,p,q);
        TreeNode right = lowestCommonAncestor(root.right,p,q);
        if(left ==null && right ==null){
            return null;
        }else if(left == null && right != null){
            return right;
        }else if(right == null && left != null){
            return left;
        }else{
            return root;
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 程序员思维——四个思考原则

    一 什么是四个思考原则 以终为始 确定好真实目标 任务分解 找到实施路径 沟通反馈 解决与人打交道出现的问题 自动化 解决与机器打交道出现的问题 二 如何运用思考框架 运用这个思考框架 我们需要问自己一些问题 Where are we 我们
  • Qt学习_17_一些关于QTableWidget的记录

    1 QTableWidget clear 程序异常退出 近日 项目中使用到QTableWidget 遇到一个问题 项目需要清空这个表格 但是无论调用clear clearContents 程序都报 程序异常退出 而且项目程序还比较多 最开始

随机推荐

  • prometheus grafana mysql监控配置使用

    文章目录 前传 bitnami mysqld exporter 0 15 1镜像 出现了问题 my cnf 可以用这个 prom mysqld exporter v0 15 0 镜像 重要的事情 mysql监控效果 外传 前传 promet
  • 第九章 1 面向对象程序设计

    两大编程思想 面向过程和对象 p108 面向过程 功能上的封装 面向对象 属性和行为上的封装 面向过程 面向对象 区别 事物比较简单 可以用线性的思维去解决 事物比较复杂 使用简单的线性思维无法解决 共同点 1 面向过程和面向对象都是解决实
  • Android跨进程渲染

    文章目录 背景 实现步骤 服务端 客户端 参考代码
  • Python+Selenium键盘鼠标模拟事件操作详解

    当我们定位到具体的一个元素的时候就可以对这个元素进行具体的操作 比如之前章节所执行的 click 操作 这是最简单的操作 webdriver 还有其他的操作 比如元素的基本操作 点击 输入 清除 还有一些高级操作如鼠标键盘模拟事件 弹出框处
  • 服务器3M固定带宽什么意思?够用吗?

    云服务器3M固定带宽是什么意思 速度快吗 3M固定带宽是指云服务器的公网带宽 用于在外网提供服务的 3M带宽的下载速度是384KB 秒 上传速度是1280KB 秒 对于个人博客或流量不多的企业官网速度还是挺快的 阿里云服务器网aliyunf
  • thinkadmin安装步骤

    一 先cmd运行安装命令 创建项目 需要在英文目录下面执行 composer create project zoujingli thinkadmin 二 在confing中的database php配置数据库 三 将仓库的data复制到ap
  • 亚马逊自养号测评防关联技巧分享,亚马逊自养号怎么养?

    我们做亚马逊的都知道 想要做好亚马逊 测评是免不了的 很多卖家选择自养号这种方式 但是亚马逊养号并不是一件容易的事 需要我们提高养号的技术和掌握相应的技巧 而且随着平台审查力度的加强 自养号的账号关联问题也给卖家们带来许多困扰 那么什么是自
  • VUE+Springboot实现生成二维码及二维码下载功能

    一 Springboot相关 1 pom依赖引入
  • Python selenium模块的安装和配置教程

    一 selenium的安装以及简单应用 我们以谷歌浏览器的chromedriver为例 1 在Python虚拟环境中安装selenium模块 pip pip3 install selenium 2 下载版本符合的webdriver 以chr
  • 山西电力市场日前价格预测【2024-01-05】

    日前价格预测 预测说明 如上图所示 预测明日 2024 01 05 山西电力市场全天平均日前电价为259 10元 MWh 其中 最高日前电价为363 99元 MWh 预计出现在18 00 最低日前电价为0 00元 MWh 预计出现在11 1
  • 大数据毕设分享 flink大数据淘宝用户行为数据实时分析与可视化

    文章目录 0 前言 1 环境准备 1 1 flink 下载相关 jar 包 1 2 生成 kafka 数据 1 3 开发前的三个小 tip 2 flink sql 客户端编写运行 sql 2 1 创建 kafka 数据源表
  • ICT行业“样品”相关业务挑战及解决方案介绍

    ICT行业供应链样品相关业务介绍 在信息通信技术 ICT 行业中 研发打样 结构件打样和非0价打样是研发和产品设计过程中的重要环节 下面我会通过具体的业务场景来解释这些概念 1 研发打样 场景例子 一家手机制造公司正在开发一款新型智能手机
  • 视频转文字用什么软件好?我来分享几款给你

    各位打工人是不是总是会接到整理会议视频的任务 你是否也曾为在整理会议视频时因为手速跟不上说话节奏而烦恼 你也曾因为转录大量内容而纠结于低效率的问题 你是否也曾为无法同时转录多个声音源而无法理解全场对话而苦恼 如果是的话不妨来看看下面这篇文章
  • Git Bash教程

    Git Bash教程 Pull操作 Pull操作 输入 git pull 呈现 base root xx git pull https github com xx xx git 得到 remote Enumerating objects 5
  • DC电源模块的应用范围与市场前景

    DC电源模块的应用范围与市场前景 DC电源模块广泛应用于各种电子设备和系统中 包括通信设备 计算机 工业自动化设备 医疗设备 航天航空设备 新能源设备等 它们为这些设备提供稳定的直流电源 保证设备的正常运行 DC电源模块主要用于为电子设备提
  • 判断字符串是否是16进制颜色工具类

    该方法接受一个字符串参数colorCode 表示需要校验的十六进制颜色值 方法内部使用正则表达式来匹配colorCode是否符合规则 如果 符合则返回true 否则返回false 正则表达式解释 表示匹配字符串的开头 表示匹配 字符 表示一
  • 光端机技术综述:从理论到实践的全面探索

    在当今数据驱动的时代 光端机技术 已成为通信领域的核心组成部分 从理论的深度研究到实践的广泛应用 光端机技术不断推动着信息社会的发展 成为连接不同设备和网络的关键技术 技术特点 高速数据传输 光端机 利用光纤传输数据 具有极高的传输速率 相
  • .cer格式证书文件和 .pfx格式证书文件有什么区别?

    这里我们将讨论 cer 和 pfx 文件类型之间的差异 什么是数字证书 数字证书在电子通信中用作验证身份的密码机制 我们需要这些证书来建立安全的在线通信渠道 并确保数字数据的隐私 真实性和正确性 数字证书包括主题 实体详细信息 颁发者 CA
  • 3 分钟为英语学习神器 Anki 部署一个专属同步服务器

    Anki 介绍 Anki 是一款基于间隔重复 Spaced Repetition 原理的学习软件 想象一下 你的大脑就像是一个需要定期维护的精密仪器 间隔重复就好比是一种精准的维护计划 它通过在最佳时刻复习信息 来确保知识在你的脑海中牢固地
  • 代码随想录算法训练营Day17 | 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236.二叉树的最近公共祖先

    LeetCode 530 二叉搜索树的最小绝对差 本题思路 看到二叉搜索树 我们可以知道 它的中序遍历的有序的 并且是单调递增 如下图所示 然后我们就可以计算出相隔的两个数之间的差值 然后找到最小的那一个即可 定义一个初始为 min 第二个