首页 > 编程语言 >剑指 Offer 68 - I. 二叉搜索树的最近公共祖先(java解题)

剑指 Offer 68 - I. 二叉搜索树的最近公共祖先(java解题)

时间:2023-03-09 11:14:32浏览次数:55  
标签:java Offer 祖先 公共 68 TreeNode null root 节点

目录

1. 题目

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

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

例如,给定如下二叉搜索树:  root = [6,2,8,0,4,7,9,null,null,3,5]

示例 1:

输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8
输出: 6 
解释: 节点 2 和节点 8 的最近公共祖先是 6。
示例 2:

输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 4
输出: 2
解释: 节点 2 和节点 4 的最近公共祖先是 2, 因为根据定义最近公共祖先节点可以为节点本身。

说明:

所有节点的值都是唯一的。
p、q 为不同节点且均存在于给定的二叉搜索树中。

作者:Krahets
链接:https://leetcode.cn/leetbook/read/illustration-of-algorithm/575kd2/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2. 解题思路

利用二叉搜索树的大小顺序判断待搜索的节点在root节点的左右:

  • 如果待搜索的节点在root节点的两边,则root是公共祖先节点;
  • 如果待搜索的节点在root节点的左边,则公共祖先节点在root左子树;
  • 如果待搜索的节点在root节点的右边,则公共祖先节点在root右子树;

如果公共祖先节点在左右子树中,可以使用递归来查找。

3. 数据类型功能函数总结

//无

4. 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 null; 
        }
        else{
            if(root.val>p.val && root.val>q.val){
                return lowestCommonAncestor(root.left, p, q);
            }
            else if(root.val<p.val && root.val <q.val){
                return lowestCommonAncestor(root.right, p, q);
            }
            else{
                return root;
            }
        }
    }
}

标签:java,Offer,祖先,公共,68,TreeNode,null,root,节点
From: https://www.cnblogs.com/CrazyPixel/p/17197607.html

相关文章

  • 还不知道如何在java中终止一个线程?快来,一文给你揭秘
    目录简介Thread.stop被禁用之谜怎么才能安全?捕获异常之后的处理总结简介工作中我们经常会用到线程,一般情况下我们让线程执行就完事了,那么你们有没有想过如何去终止一个正......
  • Java中间件学习之RabbitMQ
    什么是MQ  消息队列是典型的:生产者、消费者模型。生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息。因为消息的生产和消费都是异步的,而且只关心消息的发......
  • java 集合嵌套之ArrayList嵌套HashMap
       ......
  • Java应用【XVII】在Java中使用WebSocket
    如果您觉得本博客的内容对您有所帮助或启发,请关注我的博客,以便第一时间获取最新技术文章和教程。同时,也欢迎您在评论区留言,分享想法和建议。谢谢支持!一、 简介1.1什么是W......
  • JAVAScript 跨平台客户端脚本语言
    前端内容三大基础性技术  Javascript是一种由Netscape(网景)的LiveScript发展而来的原型化继承的面向对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解......
  • Java知识回顾
    一、Java的特性以及优势简单性面向对象(人与人直接的交流万物皆对象)可移植性(对于不同的平台有对应的JVM)高性能分布式动态性(Java反射机制)多线程安全性健壮性......
  • Java学生信息管理系统小改进
    原项目地址:Java实现学生管理系统项目完整版,每个功能详细介绍,最后面完整源代码可直接执行_学生管理后台项目介绍_菜鸟Java学习者杰的博客-CSDN博客原项目运行示意图 ......
  • 基于JSP+javaBean的留言板--改进(附源码)
    一、系统的主要功能和特点系统主要实现了以JSP和JavaBean为基础的留言板。主要包括登录、登陆检查、增加留言、查看全部留言信息、查看指定留言信息等功能实现了数据的读......
  • Redis 的Java客户端——Jedis连接池的使用详解
    一.Redis的Java客户端jedis的官方仓库地址:https://github.com/redis/jedisRedis数据结构Redis是一个key-value的数据库,key一般是String类型,不过value的类......
  • Java学习笔记13
    1.Date类1.1概述​ java.util.Date类表示特定的瞬间,精确到毫秒。1.2构造方法Date类有多个构造方法,部分已经过时。方法作用publicDate()从此刻到计算机时......