每天一道leetcode:剑指 Offer 68 - I. 二叉搜索树的最近公共祖先(适合初学者)

news2025/5/23 21:44:00

今日份题目:

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

百度百科中最近公共祖先的定义为:“对于有根树 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 为不同节点且均存在于给定的二叉搜索树中。

题目思路

所谓公共祖先,就说明,p的值小于该祖先且q的值大于该祖先,也就是说,该祖先是p和q的公共子树的根节点。那么我们可以从root开始遍历,查找p和q所在的子树,具体就是,如果p和q的值都比该根节点小,说明都在左子树,就到左子树处;如果都比该节点大,说明都在右子树,就到右子树处;否则说明在该节点的树内,该节点就是要找的节点。

代码

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution 
{
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) 
    {
        TreeNode* anc=root;
        while(1) 
        {
            if(p->val<anc->val&&q->val<anc->val) //p和q都在左子树
            {
                anc=anc->left;
            }
            else if(p->val>anc->val&&q->val>anc->val) //p和q都在右子树
            {
                anc=anc->right;
            }
            else break;
        }
        return anc;
    }
};

提交结果

欢迎大家在评论区留言!点个赞和关注支持下吧!

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

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

相关文章

常见音视频、流媒体开源编解码库及官网(四十一)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…

大麦订单生成器最新版 大麦订单一键生成截图

1.可以一键添加&#xff0c;生成的假订单没有水印&#xff0c;界面也很真实。 2.在软件中输入生成的信息&#xff0c;这是产品信息&#xff0c;选择生成的产品图像&#xff0c;最后生成它。 后台一键生成&#xff0c;独立后台管理 教程&#xff1a;解压源码&#xff0c;修改数…

电子学会C++编程等级考试2023年05月(二级)真题解析

C/C编程&#xff08;1~8级&#xff09;全部真题・点这里 第1题&#xff1a;数字放大 给定一个整数序列以及放大倍数x&#xff0c;将序列中每个整数放大x倍后输出。 时间限制&#xff1a;1000 内存限制&#xff1a;65536 输入 包含三行&#xff1a; 第一行为N&#xff0c;表示整…

nginx实现路由重定向功能 避免服务器出现 404 Not Found

首先 到服务器上 vue react等项目路由的重定向已解决不了带后缀的访问 这个重定向需要 nginx 来实现 我们先执行 scp -r 用户名 如果没设置过就是root服务器公网地址:/etc/nginx/nginx.conf E:/拷贝地址这里 我将服务器上的nginx配置文件 拷贝到了本地的 E盘下的 拷贝地址目录…

CocosCreator3.8研究笔记(十六)CocosCreator 2D对象

CocosCreator 中&#xff0c;不涉及模型的图片渲染体统称为 2D 渲染对象。 所有的 2D渲染对象需在 RenderRoot 节点下&#xff08;带有 RenderRoot2D 组件的节点&#xff09;才可以被渲染&#xff0c;由于 Canvas 组件本身继承 RenderRoot2D 组件&#xff0c;所以 Canvas 组件一…

分享一个基于微信小程序的汽车租赁小程序 车辆出租小程序 汽车租借小程序源码 lw 调试

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人七年开发经验&#xff0c;擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等&#xff0c;大家有这一块的问题可以一起交流&#xff01; &#x1f495;&…

typescript环境搭建,及tsc命令优化

typescript typescript. 是一种由微软开发的 开源 、跨平台的编程语言。. 它是 JavaScript 的超集&#xff0c;最终会被编译为JavaScript代码。. TypeScript添加了可选的静态类型系统、很多尚未正式发布的ECMAScript新特性&#xff08;如装饰器 [1] &#xff09;。. 2012年10月…

华为HCIA(三)

链路本地地址接口标识64bit 当STP端口到了Forwarding状态后&#xff0c;会转发流量&#xff0c;也处理报文 在TCP/IP模型中&#xff0c;会话层&#xff0c;表示层和应用层&#xff0c;都规划成了应用层 路由表包含目的地址和掩码&#xff0c;优先级&#xff0c;cost,下一跳和…

2023/09/14 qtc++

仿照vector手动实现自己的myVector部分功能&#xff0c;最主要实现二倍扩容功能 #include <iostream>using namespace std; template <typename V> class myVector { private:V *data; //存放数据int size; //数组长度int capacity; //容量大小 public:m…

项目实战— pytorch搭建CNN处理MNIST数据集

项目文件夹介绍 项目文件夹 CNN_MNIST_practice文件夹是整个项目的文件夹&#xff0c;里面存放了六个子文件夹以及四个 .py 程序&#xff0c;接下来我们分别来介绍这些文件的内容。 其中 minist_all_CPU.py 是CPU版本的模型训练&#xff0b;测试程序&#xff0c;而 min…

Mongodb+NodeJS实现服务端架构

一、前言 使用Mogodb和Nodejs完成简单的服务端架构&#xff0c;读完此文章后你会学到&#xff1a;1. 如何安装Mongodb2. Mongodb命令行3. Mongodb的图形化工具Robomongo的使用4. 如何使用NodeJS指挥Mongodb二、安装Mongodb 1、Mongodb简介 官网: https://www.mongodb.com/源于…

2023最实用的订单管理软件有哪些?推荐这5款

订单管理软件是基于互联网技术和数据管理的信息化平台&#xff0c;用于维护和管理订单整个生命周期的系统&#xff0c;包括订单创建、订单修改、订单查询、订单管理、订单发货等一系列流程。 实用的订单管理软件&#xff0c;要具备基础功能的订单管理功能&#xff0c;包含订单…

Python中高效的爬虫框架

大家好&#xff0c;我是涛哥。 在信息时代&#xff0c;数据是无价之宝。许多开发者和数据分析师需要从互联网上采集大量的数据&#xff0c;用于各种用途&#xff0c;如分析、建模、可视化等。Python作为一门强大的编程语言&#xff0c;提供了多种高效的爬虫框架&#xff0c;使…

vue echarts条形统计图每个条上部分加数字

series: [{name: "",type: "bar",barGap: "-100%",//两条线可以重合在一起barWidth: 25,itemStyle: {normal: {label:{//在normal中放lable字段show:true,position: top,color:"#c3cbde",formatter:(params)>{//核心部分 formatter…

LeetCode 热题 100(八):贪心。121. 买卖股票的最佳时机、45. 跳跃游戏 II

题目一&#xff1a; 121. 买卖股票的最佳时机https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/ 思路&#xff1a;因为时间复杂度O&#xff08;n&#xff09;&#xff0c;所以使用贪心来做。类似双指针&#xff0c;一个指针记录到当前循环时最小的股票价格&…

企业高效管理多个微信账号的软件

在现代社交媒体的时代&#xff0c;微信已经成为了人们交流、工作的重要工具之一。然而&#xff0c;对于一些企业来说&#xff0c;管理多个微信账号却是一项令人头疼的任务。好在&#xff0c;现在有了一款强大的软件&#xff0c;能够帮助企业高效地管理各个微信账号&#xff0c;…

js基础总结

js基础总结 ajax的post请求中&#xff0c;报错&#xff1a;Content type application/x-www-form-urlencoded;charsetUTF-8 not supported"数组和对象获取值的方式正则去掉特殊字符&#xff1a;【&#xff0c;】&#xff0c;“&#xff0c;”等&#xff0c;可同时处理多个…

投资理财基础知识分享(三)

大家好&#xff0c;我是财富智星&#xff0c;今天跟继续跟大家分享投资理财基础知识&#xff0c;买理财&#xff0c;何时买&#xff0c;何时卖的问题。 一、何时买&#xff1f; 在投资中&#xff0c;决定何时买入资产对于理财新手来说并不是一个应该花费过多精力的问题&#xf…

跟模型和中间层聊聊:什么是最好的AI原生应用?

软件 2.0 注定会发生&#xff1a;所有软件都值得用神经网络重做一遍。 这个 OpenAI 大神 Karpathy 多年前的预言&#xff0c;指向了今天 LLM 应用层的一个关键问题——如何基于 LLM 能力&#xff0c;设计好 AI 原生应用。 我们看到&#xff0c;应用层的创业者们感到悲观、质疑和…

WebDAV之π-Disk派盘 + 网盘精灵

网盘精灵是一款让您的iPhone、iPod和iPad变成WebDAV客户端的软件。它提供了以下功能: 1、WebDAV操作:网盘精灵支持通过WebDAV协议连接到服务器,进行文件的上传、下载和管理操作。您可以使用它连接到WebDAV服务器,方便地进行文件的传输和管理。 2、文件共享:通过网盘精灵…