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

2025年- H48-Lc156 --236. 二叉树的最近公共祖先(递归、深搜)--Java版

1.题目描述

在这里插入图片描述
在这里插入图片描述
递归终止条件:

如果当前节点 root 为 null,表示到达了叶子节点的空子树;

如果当前节点是 p 或 q,就返回它(因为从这里可以回溯寻找公共祖先)。

2.思路

(1) 如果当前节点为 null,或者等于 p 或 q,直接返回。应该返回 root,因为找到了 p 或 q,不能返回 null
(2) 在左子树中查找 p 和 q
(3)在右子树中查找 p 和 q
(4) 如果左右子树都找到了,说明 p 和 q 分别在左右子树中,当前节点是最近公共祖先
(5) 如果只在左子树找到了结果
(6)否则返回右子树的结果(可能是 null 或找到的节点)

3.代码实现

 class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) { val = x; }public TreeNode(int val, TreeNode left, TreeNode right) {this.val = val;this.left = left;this.right = right;}}
public class H236 {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {// 后序遍历 + 递归方式// 如果当前节点是 null,或者当前节点就是 p 或 q,则返回当前节点
//        递归终止条件:
//
//        如果当前节点 root 为 null,表示到达了叶子节点的空子树;
//
//        如果当前节点是 p 或 q,就返回它(因为从这里可以回溯寻找公共祖先)。if(root==null||root==p||root==q){return root;}//递归遍历左右子树TreeNode left=lowestCommonAncestor(root.left,p,q);TreeNode right=lowestCommonAncestor(root.right,p,q);// 如果左子树和右子树都找到了非空结果,说明 p 和 q 分别在左右子树中// 当前节点 root 就是最近公共祖先if(left!=null&&right!=null){// p 和 q 分别在左右子树return root;}// 如果只有一边找到了非空结果,返回那一边(继续向上传递结果)if(left!=null){return left;}else{return right;}}public static void main(String[] args){H236 test=new H236();TreeNode node11=new TreeNode(4,null,null);TreeNode node10=new TreeNode(7,null,null);TreeNode node7=new TreeNode(8,null,null);TreeNode node6=new TreeNode(0,null,null);TreeNode node5=new TreeNode(2,node10,node11);TreeNode node4=new TreeNode(4,null,null);TreeNode node3=new TreeNode(1,node6,node7);TreeNode node2=new TreeNode(5,node4,node5);TreeNode head=new TreeNode(3,node2,node3);TreeNode res=test.lowestCommonAncestor(head,node2,node3);System.out.print(res.val);}}
http://www.lryc.cn/news/2385867.html

相关文章:

  • 【人工智能】低代码-模版引擎
  • Hertz+Kitex快速上手开发
  • 线程池配置经验总结
  • 机器学习课程设计报告 —— 基于二分类的岩石与金属识别模型
  • 分词算法BPE详解和CLIP的应用
  • STM32F103_Bootloader程序开发02 - Bootloader程序架构与STM32F103ZET6的Flash内存规划
  • 通过Auto平台与VScode搭建远程开发环境(以Stable Diffusion Web UI为例)
  • Windows_Rider C#语言开发环境构建
  • Unity 打包程序全屏置顶无边框
  • GAMES104 Piccolo引擎搭建配置
  • 第 29 场 蓝桥·算法入门赛
  • 用service 和 SCAN实现sqlplus/jdbc连接Oracle 11g RAC时负载均衡
  • Jenkins 中获取构建触发用户的完整指南
  • 防火墙流量管理
  • uniapp+ts 多环境编译
  • Linux系统移植①:uboot概念
  • linux 学习之位图(bitmap)数据结构
  • DAY 35
  • 理论篇一:了解webpack是什么,能解决什么问题,如何使用
  • AWS EC2实例安全远程访问最佳实践
  • 集群、容器云与裸金属服务器的全面对比分析
  • 【强化学习】#7 基于表格型方法的规划和学习
  • EasyRTC嵌入式音视频通信SDK一对一音视频通信,打造远程办公/医疗/教育等场景解决方案
  • Linux/aarch64架构下安装Python的Orekit开发环境
  • 网络安全-等级保护(等保) 3-2-1 GB/T 28449-2019 第6章 方案编制活动
  • Oracle Enqueue Names
  • 【免费使用】剪Y专业版 8.1/CapCut 视频编辑处理,素材和滤镜
  • 【DCGMI专题1】---DCGMI 在 Ubuntu 22.04 上的深度安装指南与原理分析(含架构图解)
  • 道德经总结
  • 实现rpc通信机制(待定)