定个小目标之每天刷LeetCode热题(2)

今天刷的是这题,属于中等题,我是直接看的题解,官方给出了两种方法

第一种是递归,直接看代码吧

class Solution {
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        if (root == p || root == q || root == null) {}return root;
        TreeNode left = lowestCommonAncestor(root.left, p, q);
        TreeNode right = lowestCommonAncestor(root.right, p, q);
        if (left != null && right != null) return root;
        if (left == null) return right;
        return left;
    }
}

这段代码的意思大概如下:

1.如果当前节点是p,或者当前节点是q,或者当前节点是空节点则返回当前节点

2.左右子树都找到则返回当前节点

3.只有左子树找到则返回递归左子树的结果

4.只有右子树找到则返回递归右子树的结果

5.左右子树都没有找到则返回空节点

为了加深对递归的理解,我画了个这图如下,主要体现递归时参数传递和返回值的流动,下面的图是以寻找节点4和节点8的最近公共祖先为例

第二种是存储父节点,利用HashMap存储所有节点的父节点,key是当前节点的值,value是当前节点的父节点,然后利用HashSet来记录访问的节点,从p节点开始往上依次访问,访问过的节点放到HashSet中,接着从q节点依次向上访问,如果遇到访问过的节点,那么此节点就是p和q的最近公共祖先节点,首先代码如下

class Solution {
    Map<Integer, TreeNode> parent = new HashMap<Integer, TreeNode>();
    Set<Integer> visited = new HashSet<Integer>();

    public void dfs(TreeNode root) {
        if (root.left != null) {
            parent.put(root.left.val, root);
            dfs(root.left);
        }
        if (root.right != null) {
            parent.put(root.right.val, root);
            dfs(root.right);
        }
    }

    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        dfs(root);
        while (p != null) {
            visited.add(p.val);
            p = parent.get(p.val);
        }
        while (q != null) {
            if (visited.contains(q.val)) {
                return q;
            }
            q = parent.get(q.val);
        }
        return null;
    }
}

 题目链接:https://leetcode.cn/problem-list/2cktkvj/

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

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

相关文章

Windows环境下Maven3.5.4下载和配置详细图文教程

1、 前言&#xff1a;有了maven这个仓库&#xff0c;我们就少为包之间的冲突烦恼了。 2、 说明&#xff1a;版本&#xff1a;Maven3.5.4 3、 官网下载地址如下http://maven.apache.org/download.cgi&#xff0c;点这里下载&#xff08;如果版本更新&#xff0c;在这里可以找到…

香橙派Kunpeng Pro性能测评:高效能小型服务器开发板的全面体验

香橙派 Kunpeng Pro 是一款面向开发者和教育市场的高性能单板计算机&#xff0c;其搭载了鲲鹏处理器&#xff0c;可提供 8TOPS INT8 计算能力&#xff0c;提供了 8GB 和 16GB 两种内存版本&#xff0c;开发板结合了鲲鹏全栈根技术&#xff0c;全面使能高校计算机系统教学和原生…

张驰咨询:六西格玛培训,IT界的“福尔摩斯”

六西格玛&#xff0c;这个曾以制造业为背景的管理理念&#xff0c;如今却在IT领域大放异彩。其背后的原因&#xff0c;不仅仅是因为六西格玛追求零缺陷、持续改进的核心价值观与IT行业对产品质量和用户体验的极致追求不谋而合&#xff0c;更是因为它提供了一种全新的思维方式和…

护眼灯到底有用吗?引发护眼台灯危害的四大原因曝光!

护眼灯到底有用吗&#xff1f;近几年随着各大科技感满满的设备诞生&#xff0c;近视率也伴随着不断提高&#xff0c;现如今是已经攀升到了惊人的53.6%&#xff0c;这一数据也清晰的警惕着每一位家长&#xff0c;此刻护眼灯以独特的护眼效果脱颖而出&#xff0c;同时也在书房中占…

AI Agent:自主性、反应性与交互性的融合,将颠覆软件行业

Agent来袭&#xff1a;AI如何变身软件界的超级英雄&#xff1f; ©作者|Zhongmei 来源|神州问学 前言 “AI Agent不仅会彻底改变计算机的使用方式&#xff0c;它还将颠覆软件行业&#xff0c;是一个对科技行业的冲击波&#xff0c;是一场自‘输入命令到点击图标’变革之后…

postgresql insert on conflict 不存在则插入,存在则更新

向一张表执行插入动作&#xff0c;如果插入的字段数据已存在&#xff0c;则执行更新操作&#xff0c;不存在则进行插入操作。 1、创建一张表 CREATE TABLE "user_info" ( "id" int2 NOT NULL, "name" varchar(20) COLLATE "pg_catalog&quo…

VMware的网络不通?这一篇给你一定的参考.虚拟机网络配置

如果你的虚拟机莫名其妙ping不通网络了&#xff0c;可以参考一下我的配置。这不是一篇教程&#xff0c;你可以核对一下自己的bug。 虚拟网络配置器中&#xff1a; 使用管理员权限更改设置&#xff0c;会跳出来vmnet0 桥接、仅主机和NAT都必须要有 vment0&#xff1a; vmnet1:…

庆余年2火了,却把热爱开源的程序员给坑了

庆余年 2 终于开播了&#xff0c;作为一名剧粉&#xff0c;苦等了五年终于盼来了。开播即爆火&#xff0c;虽然首播的几集剧情有些拖沓&#xff0c;不过也不影响这是一部好剧。 然而&#xff0c;庆余年 2 的爆火&#xff0c;却把 npmmirror 镜像站给坑惨了。npmmirror 镜像站&…

YYDS!哈工大博士PyTorch笔记火了!!

Pytorch是目前常用的深度学习框架之一&#xff0c;它凭借着对初学者的友好性、灵活性&#xff0c;发展迅猛&#xff0c;它深受学生党的喜爱&#xff0c;我本人也是使用的Pytorch框架。 比起 TF 的框架环境配置不兼容&#xff0c;和 Keras 由于高度封装造成的不灵活&#xff0c…

halcon 传统缺陷检测

一、电路检测 算子解释 dyn_threshold *dyn_threshold 利用局部阈值分割图像*OrigImage (input_object)&#xff1a;原始图像*ThresholdImage (input_object)&#xff1a;处理后图像&#xff08;一般采用滤波处理&#xff09;*RegionDynThresh (output_object)&#xff1…

HCIE vs CCIE:网络界的巅峰对决,你选谁?

在网络工程领域&#xff0c;HCIE和CCIE是两个都属于是顶级认证。 作为网络工程师&#xff0c;你可能在选择认证时面临困惑。那么&#xff0c;HCIE和CCIE到底有什么区别&#xff1f;哪个更适合你&#xff1f; 今天&#xff0c;我们来一场巅峰对决&#xff0c;看看这两大认证的…

芋道源码 / yudao-cloud:前端技术架构探索与实践

摘要&#xff1a; 随着企业信息化建设的深入&#xff0c;后台管理系统在企业运营中扮演着至关重要的角色。本文将以芋道源码的yudao-cloud项目为例&#xff0c;深入探讨其前端技术架构的设计思路、关键技术与实现细节&#xff0c;并分享在开发过程中遇到的挑战与解决方案。 一、…

详解CSS(三)及案例实现

目录 1.弹性布局 1.1 弹性布局案例 1.2flex 布局基本概念 1.3常用属性 1.3.1justify-content 1.3.2align-items 2.案例实现&#xff1a;小广告 3.案例实现&#xff1a;百度热榜 1.弹性布局 弹性布局&#xff08;Flex布局&#xff09;是一种用于创建自适应和响应式布局的…

SEC突发:以太坊ETF大概率获批

美国证监会大概率批准以太坊现货ETF。 5月20日&#xff0c;据外媒CoinDesk报道&#xff0c;知情人士透露&#xff0c;美国SEC周一要求证券交易所更新以太坊现货ETF的19b-4备案文件。19b-4备案文件是一种表格&#xff0c;用于向SEC通报允许基金在交易所交易的规则变更。 三位消息…

STM32启动过程分析

Keil堆栈设置注意事项 一、启动模式 复位方式&#xff1a;上电复位、硬件复位、软件复位 从地址0x0000 0000处取出堆栈指针MSP的初始值&#xff0c;该值就是栈顶地址。从地址0x0000 0004处取出程序计数器指针PC的初始值&#xff0c;该值指向复位后执行的第一条指令。 说白了就…

新能源汽车为乙炔炭黑行业带来了发展机遇

新能源汽车为乙炔炭黑行业带来了发展机遇 乙炔炭黑&#xff08;Acetylene carbon black&#xff09;又称乙炔黑&#xff0c;外观为黑色极细粉末&#xff0c;相对密度1.95&#xff08;氮置换法&#xff09;&#xff0c;纯度很高&#xff0c;含碳量大于99.5%&#xff0c;氢含量小…

智能水抄表系统是什么?

1.概述&#xff1a;智能水抄表系统的概念与意义 智能水抄表系统是现代科技与水资源管理的完美结合&#xff0c;它利用先进的传感器技术、无线通信技术和数据分析能力&#xff0c;实现了远程、实时的水表读取和管理。这种系统不仅提高了抄表效率&#xff0c;降低了人力成本&…

品牌做电商控价的原因

品牌控价确实是一项至关重要的任务&#xff0c;它关乎着品牌形象、市场定位以及长期发展的稳定性。在电商平台上&#xff0c;价格的公开性和透明度使得消费者、经销商和其他渠道参与方都能够轻易地进行价格比较。因此&#xff0c;品牌方必须对电商渠道的价格进行严格的管控&…

百世慧入选第七届数字中国建设峰会“2024企业数字化转型典型应用案例”

5月24日-25日&#xff0c;第七届数字中国建设峰会在福州举行。本届峰会是国家数据工作体系优化调整后首次举办的数字中国建设峰会&#xff0c;主题为“释放数据要素价值&#xff0c;发展新质生产力”。 为了全方位展示各领域数字化最新成果&#xff0c;共创数字中国美好未来&a…

C++容器之双端队列(std::deque)

目录 1 概述2 使用实例3 接口使用3.1 construct3.2 assigns3.3 iterators3.4 capacity3.5 rezize3.6 shrink_to_fit3.7 access3.8 assign3.9 push_back3.10 push_front3.11 pop_back3.12 pop_front3.13 insert3.14 erase3.15 swap3.16 clear3.17 emplace3.18 emplace_front3.19…