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

 一、问题描述

二、解题思路

使用深度递归的方式,如果当前结点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;
                }
            }
        }
    }
}

 四、刷题链接

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

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

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

相关文章

联邦学习——学习笔记1:FedAvg算法

文章目录 本笔记参考自b站up主:丸一口 原视频链接 如上图,现有6个医院:眼科、儿科、妇科、骨科、综合医院1、综合医院2。中间节点为政府。 现政府要求用各个医院的数据训练某个模型,希望对某些疾病进行一些预测,数据…

【Linux】—在Linux中搭建Python环境

文章目录 前言一、检查Linux系统是否自带Python版本。二、安装依赖包(重要)三、下载Python-3.9.5安装包四、下载完成后,通过xftp6上传到Linux服务器上五、解压Python安装包六、编译安装Python七、配置Python环境变量八、运行Python,查看是否可用九、pyth…

图像处理与视觉感知复习--频率域图像增强图像变换

文章目录 图像变换与信号分解正弦信号与傅里叶级数傅里叶变换离散傅里叶变换(DFT)频率域滤波 图像变换与信号分解 空间域:就是像素域,在空间域的处理是在像素级的处理,如像素级的叠加。 频率域:任何一个波形都可以分解用多个正弦…

AI交互数字人如何赋能数智教育?

随着AI交互数字人技术的飞速发展,教育领域正经历着前所未有的变革。AI交互数字人为教育领域注入了全新活力,重塑着教学模式,为学生带来沉浸式学习体验。 AI交互数字人在教育领域中,可以应用在: 1、个性化学习教学指导…

APM Profile 在系统可观测体系中的应用

引言 应用程序性能分析(Application Performance Management,APM)是一个广泛的概念,涉及应用程序运行时各种性能指标的监测、诊断和优化。在可观测体系建设中,APM 是保障系统业务运行性能的关键技术,确保用…

递归算法:代码迷宫中的无限探索

✨✨✨学习的道路很枯燥,希望我们能并肩走下来! 目录 前言 一 深入理解递归 二 迭代VS递归 三 递归算法题目解析 3.1 汉诺塔问题 3.2 合并两个有序链表 3.3 反转链表 3.4 两两交换链表中的节点 3.5 Pow(x,n)(快速幂)…

CRMEB-PHP多商户版安装系统配置清单

系统在安装完成之后,需要对系统进行一系列的配置,才能正常使用全部的功能,以下是官方整理的配置清单 平台后台 商户后台

计算机SCI期刊,中科院3区,易过审,专业认可度不错

一、期刊名称 Journal of Cloud Computing-Advances Systems and Applications 二、期刊简介概况 期刊类型:SCI 学科领域:计算机科学 影响因子:4 中科院分区:3区 三、期刊征稿范围 Journal of Cloud Computing:A…

MyBatis 动态 SQL怎么使用?

引言:在现代的软件开发中,数据库操作是任何应用程序的核心部分之一。而在 Java 开发领域,MyBatis 作为一款优秀的持久层框架,以其简洁的配置和强大的灵活性被广泛应用。动态 SQL 允许开发人员根据不同的条件和场景动态地生成和执行…

Flutter 简化线程Isolate的使用

文章目录 前言一、完整代码二、使用示例1、通过lambda启动线程2、获取线程返回值3、线程通信4、结束isolate 总结 前言 flutter的线程是数据独立的,每个线程一般通过sendport来传输数据,这样使得线程调用没那么方便,本文将提供一种支持lambd…

CIRCOS圈图绘制 - circos安装

Circos是绘制圈图的神器,在http://circos.ca/images/页面有很多CIRCOS可视化的示例。 Circos可以在线使用,在线使用时是把表格转为圈图,不过只允许最大75行和75列;做一些简单的示意图会比较好,最后时会介绍下在线的tab…

vue大屏适配方案

前言 开发过大屏的铁汁们应该知道,前期最头疼的就是大屏适配,由于大屏项目需要在市面上不是很常见的显示器上进行展示,所以要根据不同的尺寸进行适配,今天我将为大家分享的我使用的大屏适配方案,话不多说,直…

MySQL Server和Server启动程序(一)

MySQL Server mysqld,也称为MySQL Server,是一个单线程多任务的程序,它在MySQL安装中执行大部分工作。它不会生成额外的进程。MySQL Server管理对包含数据库和表的MySQL数据目录的访问。数据目录也是其他信息(如日志文件和状态文…

Windows Server配置iSCSI,做ESXI共享存储

1:使用一台Windows Server2022主机配置iSCSI,准备给ESXI8.0做共享存储使用。有一些ESXI的功能必须使用共享存储才行,比如HA的功能。 2:登录系统,点击添加角色和功能。 3:之后一路下一步,在选择…

健身器械行业外贸ERP管理降本增效解决方案

随着经济的迅速发展,以及健身锻炼的普及,人们对健身器材的需求量也在大幅度增加。欧美市场增长迅猛,家用健身器材热度飙升,尤其是跑步机、健身单车等轻便型家用健身器材,备受消费者青睐。 出口的主要国家包括&#xf…

Git 和 TortoiseGit 安装和配置(图文详解)

使用git,需要在Windows上需要安装两个软件:1)Git 2)TortoiseGit 若需要,可以下载TortoiseGit汉化语言包。 注意:tortoiseGit是在安装了Git的基础上运行的,所以需要先安装Git,后安装…

智慧校园导航系统:技术驱动下的校园管理与师生体验革新

随着智慧校园建设的不断推进,校园导航系统作为提升校园管理效率、优化师生出行体验的重要工具,正逐渐成为各大高校的标配。本文将重点介绍维小帮智慧校园导航系统,如何通过创新的设计和功能,解决校园导航中的种种难题,…

1分钟带你部署本地Llama3大模型

介绍 LLaMa 3由Meta于2024年4月18日正式发布,这一版本是对先前LLaMa系列的重大升级。新发布的模型包括8B(80亿参数)和70B(700亿参数)两个版本,这两个版本在一系列行业标准基准测试中展示了最先进的性能。 从…

低版本火狐浏览器报错:class is a reserved identifier

低版本火狐浏览器报错:class is a reserved identifier 原因:react-dnd,dnd-core 等node包的相关依赖有过更新,使得在低版本火狐浏览器中不支持 class 解决方法:在使用webpack打包构建时,编译排除node_modu…

7,KQM模块的驱动

1,查资料,查模块的通信接口(单片机和模块之间采用什么方式通信)硬件接口,驱动方式(串口驱动用串口发送接收PC10,PC11) 只用了三个脚:VCC GND T&…