深度优先遍历-在二叉树中找到两个节点的最近公共祖先

news2024/11/20 20:35:59

目录

一、问题描述

二、解题思路

三、代码实现

四、刷题链接


一、问题描述

二、解题思路

使用深度递归的方式,如果当前结点val为o1时,返回1,如果当前结点是val为o2时,返回2;

1.当前结点的左右子树结点返回值分别为1和2时,说明该结点是最近的公共祖先结点

2.当前结点值为o1,左或者右子树返回值为2时,说明o1就是公共祖先结点

3.当前结点值为o2,左或者右子树返回值为1时,说明o2就是公共祖先结点

4.注意,当左右子树为空时,返回值为0,这样只要这棵子树里面没有o1或者o2,那么这棵子树就会一直返回0。

三、代码实现

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    
    int resval=0;
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param root TreeNode类 
     * @param o1 int整型 
     * @param o2 int整型 
     * @return int整型
     */
    public int lowestCommonAncestor (TreeNode root, int o1, int o2) {
        // write code here
        dfs(root,o1,o2);
        return resval;
    }
    public int dfs(TreeNode root,int target1,int target2){
        if(root==null){
            return 0;
        }else{
            int leftval=dfs(root.left,target1,target2);
            int rightval=dfs(root.right,target1,target2);
            if(root.val==target1){
                if(leftval==2||rightval==2){
                    //目标值在根节点和左或者右两侧,返回根节点值
                    resval=root.val;
                    return 0;
                }else{
                    return 1;
                }
            }else if(root.val==target2){
                if(leftval==1||rightval==1){
                    //目标值在根节点和左或者右两侧,返回根节点值
                    resval=root.val;
                    return 0;
                }else{
                    return 2;
                }
            }else{
                //目标值在根节点左右两侧
                if(leftval+rightval==3){
                    resval=root.val;
                    return 0;
                }else{
                    return leftval+rightval;
                }
            }
        }
    }
}

四、刷题链接

在二叉树中找到两个节点的最近公共祖先_牛客题霸_牛客网

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[UE虚幻引擎] DTSpeechVoice 文字转语音播放 插件说明

本插件可以在UE中使用蓝图把文本转成语音播放,播放的声音引擎是使用Windows自带的语音引擎,支持Win10,Win11。 系统设置 首先确认电脑是否有语音系统,一般正常安装的电脑都是自带的。 如果要播放多语言的,请自己下载其…

5.00001 postgresql的辅助线程 - pg_stat架构整理

文章目录 整体架构关键变量PgStat_LocalState pgStatLocal; // (pg_stat.c:193)static dlist_head pgStatPending = DLIST_STATIC_INIT(pgStatPending); (pg_stat.c:218)static MemoryContext pgStatPendingContext = NULL;(pg_stat.c:210)static const PgStat_KindInfo pgstat…

网络安全:深入探讨端点保护的策略与实践

文章目录 网络安全:深入探讨端点保护的策略与实践引言端点保护简介端点保护面临的挑战端点保护的最佳实践定期更新和打补丁使用强大的防病毒软件实施多因素认证 结语 网络安全:深入探讨端点保护的策略与实践 引言 在我们的网络安全系列文章中&#xff…

陶建辉入选 2023 年度“中国物联网行业卓越人物榜”

在这个技术飞速发展的时代,物联网行业作为推动社会进步的重要力量,正在不断地演化和革新。近日,中国智联网生态大会暨“2023 物联之星”年度榜单颁奖典礼在上海浦东举行。现场公布了拥有物联网行业奥斯卡奖之称的 ——“物联之星 2023 中国物…

必看!!! 2024 最新 PG 硬核干货大盘点(上)

PGConf.dev(原名PGCon,从2007年至2023年)首次在风景如画的加拿大温哥华市举办。此次重新定位的会议带来了全新的视角和多项新的内容,参会体验再次升级。尽管 PGCon 历来更侧重于开发者,吸引来自世界各地的资深开发者、…

零信任是对抗AI威胁的“解药”

人工智能的变革力量正在重塑众多行业的业务运营。通过机器人流程自动化(RPA),人工智能正在将人力资源从重复的、基于规则的任务中解放出来,并将其重点放在战略性的、复杂的操作上。此外,人工智能和机器学习算法可以以前…

LabVIEW电池管理系统测试平台

随着混合动力汽车技术的快速发展,对电池管理系统(BMS)的测试需求显著增加。利用LabVIEW软件开发了一款电池管理系统测试平台,通过模拟电池行为验证BMS的控制策略,从而降低成本、缩短开发周期,并提高整车的能…

解决solidworks下模型导出为urdf文件报错 “Reference sketch does not exist”的问题

标题 解决solidworks下模型导出为urdf文件报错 “Reference sketch does not exist”的问题 问题描述如下图: 解决方案: 将URDF Rederence删除后重新export即可。

零成本!无需服务器,搭建你的个性化应用!

在快速发展的互联网时代,每个人都有创造自己应用的梦想。但是,传统的应用开发往往需要大量的技术和资源投入,这对于许多独立开发者和初创企业来说是一个巨大的挑战。幸运的是,现在有了 MemFire Cloud,这款无需服务器、…

内外网映射访问内网服务器

如果本地有公网ip,比如连接的宽带有公网ip,可以直接通过路由配置转发就行了,如果本地没有公网ip,那就需要通过下面这种方式来访问内网服务器了。 1:首先内网服务器需要连接外网,可以通过网线或者WiFi都可以…

lotus snapshot 快照列表

快照列表 https://forest-archive.chainsafe.dev/list/mainnet/latest

七、(正点原子)Linux并发与竞争

Linux是多任务操作系统,肯定会存在多个任务共同操作同一段内存或者设备的情况,多个任务甚至中断都能访问的资源叫做共享资源。在驱动开发中要注意对共享资源的保护,也就是要处理对共享资源的并发访问。 一、并发与竞争 1、简介 并发就是多个…

PlantUML |像写代码一样画图

什么是 PlantUML? PlantUML是一个开源项目,它允许用户使用简单易懂的文本语言来定义和创建UML(统一建模语言)图表。这种文本语言基于简单的语法规则,使得用户可以快速地编写出图表的描述代码。 PlantUML支持多种UML图…

vite项目配置高德api定位功能

项目场景: 用vite项目集成了一个H5页面的小程序,需要调用高德的定位API,在浏览器中测试的时候,出现了一系列定位失败的情况。 问题1 Get ipLocation failed、Geolocation permission denied 本地http访问下,定位失败…

利用CUDA加速卷积计算:原理、实践与示例代码

利用CUDA加速卷积计算:原理、实践与示例代码 在深度学习领域,卷积神经网络(Convolutional Neural Networks,CNN)是目前最流行和有效的模型之一。然而,随着模型复杂度的增加,卷积计算的计算量也随之增加,这使得在CPU上进行卷积计算变得非常耗时。因此,利用CUDA加速卷积…

spark独立集群搭建

spark独立集群搭建(不依赖Hadoop) 1、上传spark-2.4.5-bin-hadoop2.7.tgz至 /usr/local/moudel ,再解压到 /usr/local/soft tar -zxvf spark-2.4.5-bin-hadoop2.7.tgz -C /usr/local/soft/ 重命名 mv spark-2.4.5-bin-hadoop2.7/ spark-2.4.5 配…

003.Linux SSH协议工具

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉&…

项目训练营第一天

项目训练营第一天 springboot后端环境搭建 1、首先需要找文章下载好tomcat、JDK、maven、mysql、IDEA。(软件下载及环境变量配置略) 2、在下载好的IDEA中,选择新建spring initial项目,选定java web,即可新建一个spri…

Pip应用及换源

一、介绍 Pip是Python的包管理器,它用于安装和管理Python的软件包。它是Python标准库的一部分,自从Python 2.7.9和Python 3.4版本开始,它已经内置在Python中,无需单独安装。 通过Pip,用户可以方便地安装、升级和卸载…

健身小程序:智能化助力个人健身旅程

一、智能化功能的核心 健身小程序的智能化功能主要体现在以下几个方面: 智能健身计划推荐:小程序内置了先进的算法,能够根据用户的身体状况、健身目标和时间安排,智能推荐个性化的健身计划。这些计划不仅科学合理,而且…