当前位置: 首页 > news >正文

leetcode236. 二叉树的最近公共祖先

在这里插入图片描述

思路:
● 二叉树类的问题一般是通过递归的方式去解决

● 判断当前节点是否为公共祖先必须得向下递归去找,并利用递归回溯的结果进行判断

● 注意这里的最近祖先从上往下回溯时是从近到远回溯判断的,所以一定是最近祖先

● 这里是否为公共祖先的判断存在两种情况 1. 左右子树包括目标节点 2. 其中一子树包括,另外的子节点为本身


代码:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {

    // 同一层的找上层最近的公共祖先
    /* 

    思路: 回溯返回标志位, 保存公共祖先
    树类型的题目一般都是用递归解决

    不同层:
       1. 有见解父子关系

    */
    TreeNode ans;
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        dfs(root,p,q);
        return ans;
    }

    public boolean dfs(TreeNode root, TreeNode p, TreeNode q){
        // 标志位
        if(root==null) return false;
        // 当前节点左右子树是否存在,这里不需要讨论左右子树都存在一个节点的情况
        boolean left=dfs(root.left,p,q);
        boolean right=dfs(root.right,p,q);
        //当前节点左右子树都包括,或者是当前节点就是其中一个节点,另一个节点为子节点,则找到目标节点
        if( (left&&right) || ( (left||right) && (root.val==p.val||root.val==q.val))){
            ans=root;
        }

        return left||right||root.val==q.val||root.val==p.val;
    }
}

相关文章:

  • 阿里巴巴Java面试题、笔试题(含答案)
  • mybatis 批量插入和批量修改
  • (附源码)php投票系统 毕业设计 121500
  • Sulfo-Cy5羧酸,Sulfo-Cyanine5 carboxylic acid,水溶性荧光染料标记羧基,激发波长(nm):649发射波长(nm):665
  • 深度神经网络的特征表示,深度神经网络通俗理解
  • 南大通用GBase 8a MPP Cluster管理工具简介
  • 前端700行代码项目练习--小米官网(仅html、css实现)
  • 简单入门linux命令
  • Spring Cloud Gateway 服务器性能异常,以及优化策略
  • 云原生中间件RocketMQ-核心原理之同步_异步刷盘,同步_异步复制解析
  • 计算机网络——数据链路层の选择题整理
  • joi:定义多个自定义错误信息
  • 限流相关算法
  • java计算机毕业设计阳明湖风景区订票系统源码+数据库+系统+lw文档+mybatis+运行部署
  • Java 中所有的锁
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • [LeetCode] Wiggle Sort
  • 「面试题」如何实现一个圣杯布局?
  • 【Amaple教程】5. 插件
  • es6要点
  • iOS编译提示和导航提示
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • Kibana配置logstash,报表一体化
  • python 装饰器(一)
  • socket.io+express实现聊天室的思考(三)
  • vue总结
  • 闭包--闭包作用之保存(一)
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 基于遗传算法的优化问题求解
  • 深入浅出Node.js
  • 我有几个粽子,和一个故事
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • # C++之functional库用法整理
  • #FPGA(基础知识)
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (第61天)多租户架构(CDB/PDB)
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .Family_物联网
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .net wcf memory gates checking failed
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • .netcore 获取appsettings
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • @Async注解的坑,小心
  • @Validated和@Valid校验参数区别
  • [ solr入门 ] - 利用solrJ进行检索
  • [Android Pro] AndroidX重构和映射
  • [Android Pro] Notification的使用
  • [CISCN2019 华北赛区 Day1 Web5]CyberPunk --不会编程的崽