Java-寻找二叉树两结点最近公共祖先

news/2024/8/29 10:11:58 标签: java, 数据结构, 二叉树

目录

题目描述:

注意事项:

示例:

示例 1:

示例 2:

示例 3:

解题思路:

解题代码:


题目描述:

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

java">/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        
    }
}

注意事项:

  • 树中节点数目在范围 [2, 105] 内。
  • -109 <= Node.val <= 109
  • 所有 Node.val 互不相同 。
  • p != q
  • p 和 q 均存在于给定的二叉树中。

示例:

示例 1:

输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
输出:3

示例 2:

输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4
输出:5

示例 3:

输入:root = [1,2], p = 1, q = 2
输出:1

解题思路:

1.当p/q==root,这种时候,直接返回root即可

2.当p和q分别在root的左右两侧时,返回root

3.当p和q在root同一侧时接收一侧的返回值

解题过程:

java"> public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        if(root==null)return root;//刚开始用不上,后面会遇到空节点
       
 //如果p and  q其中一个与root相同位置直接返回root
        if(root==p||root==q)return root;
      
//进入递归,分别让左子树和右子树分别调用方法,接收返回值
//1.两者都有返回值,则证明p,q不在同一侧,返回root
//2.只有一个具有返回值,返回该侧返回值  
    TreeNode leftTree=lowestCommonAncestor(root.left,p,q);
    TreeNode rightTree=lowestCommonAncestor(root.right,p,q);
    

     if(leftTree!=null&&rightTree!=null){
        return root;
      }else if(leftTree!=null){
            return leftTree;
        }else{return rightTree;}
 
 }

解题代码:

java">/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        if(root==null)return root;
       if(root==p||root==q)return root; 
        TreeNode leftTree=lowestCommonAncestor(root.left,p,q);
        TreeNode rightTree=lowestCommonAncestor(root.right,p,q);
        if(leftTree!=null&&rightTree!=null){
            return root;
        }else if(leftTree!=null){
            return leftTree;
        }else{
            return rightTree;
        }
    }
}


http://www.niftyadmin.cn/n/5559983.html

相关文章

为什么STM32F103c8t6最小系统板的usb只能用来供电详解

编写不易&#xff0c;仅供参考学习&#xff0c;请勿转载&#xff01;&#xff01;&#xff01; #前言 市面上所有的ST F103的最小系统板&#xff0c;都没有办法通过 micro usb来下载程序&#xff0c;不知道大家好不好奇&#xff0c;为什么&#xff1f;为什么国产的对标F1系列…

方型头螺栓的力学性能

方型头螺栓是一种特殊形状的紧固件&#xff0c;常用于需要较大承压面或特殊装配需求的场合。其力学性能&#xff0c;尤其是抗拉强度、屈服强度和延伸率&#xff0c;是衡量其质量与适用范围的关键指标。以下是对方型头螺栓力学性能的科普&#xff1a; 抗拉强度与屈服强度 抗拉强…

【面试题】Golang 锁的相关问题(第七篇)

目录 1.Mutex 几种状态 1. 锁定状态&#xff08;Locked&#xff09; 2. 未锁定状态&#xff08;Unlocked&#xff09; 3. 唤醒状态&#xff08;Woken&#xff09; 4. 饥饿状态&#xff08;Starving&#xff09; 5. 等待者计数&#xff08;Waiters Count&#xff09; 总结…

springcolud学习02

新建consumer模型 修改一下模型 pom.xml <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4…

vault安装手册

标准配置文件 ui true cluster_addr "https://127.0.0.1:8201" api_addr "https://127.0.0.1:8200" disable_mlock truestorage "raft" {path "/path/to/raft/data"node_id "raft_node_id" }listen…

Qt Style Sheets-样式表语法

样式表语法 Qt 样式表术语和语法规则几乎与 HTML CSS 的相同。如果您已经了解 CSS&#xff0c;您可能可以快速浏览此部分。 样式规则 样式表由一系列样式规则组成。样式规则由选择器和声明组成。选择器指定哪些小部件受该规则影响&#xff1b;声明指定应在小部件上设置哪些属性…

一键优雅为Ubuntu20.04服务器挂载新磁盘

itopen组织1、提供OpenHarmony优雅实用的小工具2、手把手适配riscv qemu linux的三方库移植3、未来计划riscv qemu ohos的三方库移植 小程序开发4、一切拥抱开源&#xff0c;拥抱国产化 一、小于2T磁盘挂载方式 1.1 安装磁盘到电脑后启动系统 1.2 查找未分区的磁盘 打…

Windows图形界面(GUI)-DLG-C/C++ - 列表视图(ListView)

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​​​​链接点击跳转博客主页 目录 列表视图(ListView) 控件类型 初始化控件环境 示例代码 列表视图(ListView) 控件类型 详细信息视图&#xff08;Report View&#xff09;&#xff1a;数据以列的形式显示&…