【LeetCode-中等题】236. 二叉树的最近公共祖先

news2024/11/18 12:27:00

文章目录

    • 题目
    • 方法一:后序遍历 + 回溯

题目

在这里插入图片描述

方法一:后序遍历 + 回溯

解题的核心就是:采用后序遍历

  1. 讨论p,q是否在当前的root的两边,如在两边则返回当前节点root

在这里插入图片描述

  1. 如何不在两边,只要出现一个节点等于p或者q就返回当前节点
    在这里插入图片描述
// 后序遍历  + 回溯
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        if(root == null) return null;//即做节点判空条件、、也做递归出口 (说明递归到null  都没有找到  p或q)

        if(root == p || root == q)  return root;//  说明(当前要递归的节点就是p或q直接返回)或递归找到了p或q  就不用再往下递归了 结束此次递归  返回 p 或 q

        TreeNode left = lowestCommonAncestor(root.left,p,q);//递归左子树,返回值就是找到的p或q  没找到就是null
        TreeNode right = lowestCommonAncestor(root.right,p,q);//递归右子树返回值就是找到的p或q  没找到就是null

        if(left!=null  && right!=null) return root;
        // 如果遍历左右子树 在左子树或右子树找到了都找到了(  p  或  q  )
        //  说明当前结点就是  p  q  的最近公共祖先
        
        if(left != null && right == null) return left;
        //如果当前遍历左右子树结点只找到  一个 (q 或者 p)
        //说明下一个p或者q其实就是在这个结点下面 因为一旦找到了p 或q就不会往下遍历了,
       // 所以一旦出现只能找到一个(q  或  p)的情况 说明这个这个节点即是(p 或 q) 又是q 和 p 的最近公共祖先
        if(right != null && left==null) return right; 

        return null;//所有都不满足直接返回null
    }

二叉树的最近公共祖先(DFS ,清晰图解)

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

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

相关文章

怎么让模糊的图片变清晰?试试这几招吧

有时候我们自己拍摄的照片或者是从网上下载的壁纸、头像背景等,应用的时候觉得这个画质怎么这么模糊,这种图片模糊的情况应该怎么办呐?其实借助专业有效的修复工具,我们就可以快速将模糊的图片变清晰了,今天就给大家介…

YOLO目标检测——人脸属性识别数据集下载分享

人脸多种属性、关键点标注数据集,包含了10000张脸,其中7500用于训练,2500张用于测试,共98个关键点。除了关键点之外,还有遮挡,姿态,妆容,光照, 模糊和表情等多种属性信息…

【LeetCode算法系列题解】第16~20题

CONTENTS LeetCode 16. 最接近的三数之和(中等)LeetCode 17. 电话号码的字母组合(中等)LeetCode 18. 四数之和(中等)LeetCode 19. 删除链表的倒数第N个节点(中等)LeetCode 20. 有效的…

java八股文面试[多线程]——Happens-Before规则

TODO 知识来源: 【23版面试突击】你知道什么是 happens-before 原则吗?_哔哩哔哩_bilibili 【2023年面试】Happens-Before规则是什么_哔哩哔哩_bilibili

优维×国信共研:双态交付助力国信证券持续交付更上层楼!

传统持续交付模式束缚,国信证券开启自主研发之路 在日益复杂的业务环境下,传统持续交付模式已经无法满足快速变化的需求。国信证券积极应对这一挑战,勇敢创新,突破交付瓶颈,实现了双态应用的持续交付新高度。 共研优…

任意文件读取

文章目录 渗透测试漏洞原理任意文件读取1. 任意文件读取概述1.1 漏洞成因1.2 漏洞危害1.3 漏洞分类1.4 任意文件读取1.4.1 文件读取1.4.2 任意文件读取1.4.3 权限问题 1.5 任意文件下载1.5.1 一般情况1.5.2 PHP实现1.5.3 任意文件下载 2. 任意文件读取攻防2.1 路径过滤2.1.1 过…

44、基于 AOP 的错误处理,相当于异常拦截处理

基于 springboot 自动配置的 spring mvc 错误处理,就是演示项目报错后,跳转到自定义的错误页面 ★ 两种错误处理方式 方式一: 基于Spring Boot自动配置的错误处理方式,只要通过属性文件即可配置错误处理行为。 提供自定义的错误…

C++ : implicit instantiation of undefined template ‘std::vector<_******>‘

编译报错 implicit instantiation of undefined template ‘std::vector<_struFontMap>’ 需要 #include add vector class

Windows安装单节点Zookeeper

刚学习Dubbo&#xff0c;在Centos7中docker安装的zookeeper3.7.1。然后在启动provider时一直报错&#xff0c;用尽办法也没有解决。然后zookeeper相关的知识虽然以前学习过&#xff0c;但是已经忘记的差不多了。现在学习dubbo只能先降低版本使用了&#xff0c;之后再复习zookee…

第二篇: libyuv的编译

一、前言 DirectShow采集出来的视频, 采集格式(例如: mjepg)和我们需要的视频格式(i420)并不一致&#xff0c;因此需要解码 二、libyuv下载 git clone https://chromium.googlesource.com/external/libyuv 三、libjpeg-turbo下载 git clone https://github.com/libjpeg-tu…

北斗三代PPP-B2b解算非组合PPP分析

下面进行了北斗三代PPP-B2b非组合PPP-B2b定位的初步结果&#xff08;具体结果参考图片红色字体&#xff0c;不要看坐标轴标注或者标题&#xff09;&#xff1a; 参考文献&#xff1a; 1、https://blog.csdn.net/qq_40056060/article/details/119107531目录系列文章目录前言一、…

基于Spring Boot的高校二手物品售卖网站设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频&#xff1a; 基于Spring Boot的高校二手物品售卖网站设计与实现&#xff08;Javaspring bootMySQL&#xff09; 使用技术&#xff1a; 前端&#xff1a;html css javascript jQuery ajax thymeleaf 微信小程序 后端&#xff1a;Java sp…

你需要了解的有关计算机电源的所有信息

电源单元是将插座提供的电源转换为计算机机箱内许多部件的可用电源的硬件。 它将墙上插座的交流电转换为计算机组件所需的直流电。它还通过控制电压来调节过热&#xff0c;电压可能会根据电源自动或手动变化。 电源是一个关键部件&#xff0c;因为没有它&#xff0c;其他内部…

Deepin 图形化部署 Hadoop Single Node Cluster

Deepin 图形化部署 Hadoop Single Node Cluster 升级操作系统和软件 快捷键 ctrlaltt 打开控制台窗口 更新 apt 源 sudo apt update更新 系统和软件 sudo apt -y dist-upgrade升级后建议重启 开启ssh服务 打开资源管理器 进入系统盘 找到 etc 目录 在系统盘的 etc 目录上 右键…

OceanBase安全审计之传输加密

上一期我们讲了关于 OceanBase 安全审计的《身份鉴别》和《用户管理与访问控制》 两个部分&#xff0c;OceanBase 的安全机制介绍其支持传输加密&#xff0c;今天我们主要来实践一下如何配置传输加密以及验证是否真的加密。 作者&#xff1a;金长龙 爱可生测试工程师&#xff0…

Docker安装OpenWAF

Docker安装OpenWAF 官方GitHub地址 介绍 OpenWAF&#xff08;Web Application Firewall&#xff09;是一个开源的Web应用防火墙&#xff0c;用于保护Web应用程序免受各种网络攻击。它通过与Web服务器集成&#xff0c;监控和过滤对Web应用程序的流量&#xff0c;识别和阻止潜…

Vue中使用qrcode实现渲染二维码中间添加自定义logo-demo

效果 使用 import QRCode from qrcode; 具体生成过程 <template><div class"banner-login"><img :src"qrDataUrl" /></div> </template><script setup> import { ref, reactive } from vue; import QRCode from q…

Caffine和Guava的refreshAfterWrite的异同

背景: guava和caffine的refreshAfterWrite方法在用于本地缓存的场景是非常常用的&#xff0c;本文通过例子列举下caffine的refreshAfterWrite方法和guava的refreshAfterWrite的相同点和不同点 相同点/不同点&#xff1a; 以下都是使用keyXYZ作为例子 场景1&#xff1a;一开…

Linux网络编程:select函数的用法和原理

Linux网络编程&#xff1a;select函数的用法和原理 Linux上的select函数 select函数用于检测一组socket中是否有事件就绪.这里的事件为以下三类: 读事件就绪 在socket内核中,接收缓冲区中的字节数大于或者等于低水位标记SO_RCVLOWAT,此时调用rec或read函数可以无阻塞的读取该…

【Web UI自动化测试】Web UI自动化测试之框架篇(全网最全)

本文大纲截图&#xff1a; UnitTest框架&#xff1a; PyTest框架&#xff1a; 框架&#xff1a; 框架英文单词 framework&#xff0c;为解决一类事情的功能的集合。需要按照框架的规定&#xff08;套路&#xff09;去书写代码。 一、UnitTest框架介绍【文末分享自动化测试学…