代码随想录刷题笔记-Day20

news2024/10/4 8:21:34

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

236. 二叉树的最近公共祖先icon-default.png?t=N7T8https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/

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

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

示例 1:

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

示例 2:

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

 解题思路

找祖先,涉及到回溯,所以要使用中序递归。

考虑递归的三要素:

  • 参数:当前节点root,q和p两个要找的节点
  • 返回值:boolean,当子树包含q的时候返回True,否则返回false
  • 终止条件:root为null的时候,返回false
  • 递归逻辑:无法提前终止,当左右都返回True的时候,可以确定祖先,但是,祖先的上一层无法判断是只有一个还是两个了。所以需要一个TreeNode来保存祖先。

代码

class Solution {
    TreeNode ancestor = null;

    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        findAncestor(root, p, q);
        return ancestor;
    }

    public boolean findAncestor(TreeNode root, TreeNode p, TreeNode q) {
        if (root == null)
            return false;
        boolean cur = root == p || root == q;
        boolean left = findAncestor(root.left, p, q);
        boolean right = findAncestor(root.right, p, q);
        int count = 0;
        if (cur)
            count++;
        if (left)
            count++;
        if (right)
            count++;
        if (count == 2)
            ancestor = root;
        return left || right || cur;
    }
}

2. 二叉搜索树的最近公共祖先

235. 二叉搜索树的最近公共祖先icon-default.png?t=N7T8https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-search-tree/

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

百度百科中最近公共祖先的定义为:“对于有根树 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的中间的,并且只有一个这样的祖先,因为再网上就又变成了位于两边了。

  • 参数:root,p,q
  • 返回值:返回找到的位于中间的节点
  • 终止条件:位于中间的时候,返回root
  • 递归逻辑:小于min的时候走右侧,大于max的时候走左侧
class Solution {
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        if (root.val > Math.max(p.val, q.val))
            return lowestCommonAncestor(root.left, p, q);
        else if (root.val < Math.min(p.val, q.val))
            return lowestCommonAncestor(root.right, p, q);
        else
            return root;
    }
}

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

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

相关文章

RecombiMAb anti-mouse CD40,FGK4.5-CP133单克隆抗体

FGK4.5-CP133单克隆抗体是原始FGK4.5单克隆抗体的重组嵌合型抗体。可变结构域序列与原始FGK4.5克隆号相同&#xff0c;但是恒定区序列已经从大鼠IgG2a变为小鼠IgG2a。FGK4.5-CP133抗体像原始大鼠IgG2a抗体一样&#xff0c;不包含Fc突变。 FGK4.5-CP133单克隆抗体能与小鼠CD40(也…

压缩感知(Compressed Sensing,CS)的基础知识

压缩感知&#xff08;Compressed Sensing&#xff0c;CS&#xff09;是一种用于信号处理的技术&#xff0c;旨在以少于奈奎斯特采样定理所要求的样本频率来重构信号。该技术利用信号的稀疏性&#xff0c;即信号可以用较少的非零系数表示。压缩感知在图像获取中的应用使得在采集…

阿里云个人建站笔记

导航 一、购买ECS服务器二、配置mysql&#xff08;一&#xff09;安装Mysql步骤一&#xff1a;安装mysql步骤二&#xff1a;配置MySQL步骤三&#xff1a;远程访问MySQL数据库 &#xff08;二&#xff09;给实例配置安全组策略&#xff08;三&#xff09;设置防火墙 一、购买ECS…

防御保护——综合实验

拓扑图 实验需求&#xff1a; 1.Fw1和Fw2组成主备模式的双机热备 2.DMZ区存在两台服务器&#xff0c;现在要求生产区的设备仅能在办公时间&#xff08;9:00-18:00&#xff09;访问&#xff0c;办公区的设备全天都可以访问。 3.办公区设备可以通过电信链路和移动链路上网(多对多…

Linux 实例常用内核参数介绍—容器访问外部网络之ip_forward数据包转发

文章目录 1 问题解决1.1 问题1.2 原因1.3 解决临时打开永久打开 下面为扩展内容Linux 实例常用内核参数介绍:[https://cloud.tencent.com/document/product/213/46400](https://cloud.tencent.com/document/product/213/46400) 2 net.ipv4.ip_forward内核参数通俗解释3 在Linux…

[office] EXCEL怎么制作大事记图表- #学习方法#其他

EXCEL怎么制作大事记图表? 在宣传方面&#xff0c;经常会看到一些记录历史事件、成长历程的图&#xff0c;非常的直观、好看(如下图所示)。那么是怎么做到呢呢?这里我们介绍一下用EXCEL表格快速做出事件记录图的方法。 1、首先&#xff0c;做出基础表格(如下图一所示)。表格…

nacos部署

简介 Nacos 阿里巴巴推出来的开源项目&#xff0c;是更易于构建云原生应用的动态服务发现、配置管理和服务管理平台 Nacos 致力于发现、配置和管理微服务&#xff0c;并提供简单易用的特性集&#xff0c;能够快速实现动态服务发现、服务配置、服务元数据及流量管理。 Nacos 更…

金三银四,全网最详细的软件测试面试题总结

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 前面看到了一些面试题&#xff0c;总感觉会用得到&#xff0c;但是看一遍又记不住&#xff0c;所…

LeetCode每日一题【26.删除有序数组中的重复项】

题目如下&#xff1a; 思路&#xff1a; 双指针&#xff0c;开始时left指向首元素&#xff0c;right指向下一个元素。当left对应元素与right对应元素相同时&#xff0c;向后移动right&#xff1b;当不相同时&#xff0c;先往后移动left&#xff0c;再把right所指元素赋值给lef…

150173-73-2,BODIPY 558/568 NHS 活化酯,一种具有稳定荧光属性的黄色染料

您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;150173-73-2&#xff0c;BODIPY 558/568 NHS 活化酯&#xff0c;BODIPY 558/568 NHS ester &#xff0c;BODIPY 558/568 NHS 一、基本信息 产品简介&#xff1a;BODIPY 558/568具有高度的量子产率和消光系数&#x…

【ansible】通过role角色部署lnmp架构

目录 一、roles模块的介绍 二、roles的目录层次 2.1 roles 内各目录含义解释 三、在一个playbook中使用roles模块的步骤 四、实操 步骤一&#xff1a;完成目录的准备 步骤二&#xff1a;完成nginx的roles创建和测试 1.准备nginx.repo文件到files子目录中 2.完成vars目…

STM32F1 - I2C读写EEPROM

Inter-integrated circuit 1> 实验概述2> I2C模块 - 硬件方框图3> I2C模块 - 主发送器模式3.1> 发送1Byte数据3.2> 抓波形 4> I2C模块 - 主接收器模式 1> 实验概述 通过STM32F103内部I2C硬件模块&#xff0c; 读写EEPROM - AT24C02 2> I2C模块 - 硬件方…

H5 异次元二次元引导页源码

H5 异次元二次元引导页源码 源码介绍&#xff1a;异次元二次元引导页源码是一款二次元引导单页源码&#xff0c;此单页有模拟4个页面的H5自适应效果。源码全局H5未加密&#xff0c;可自行修改调配。 下载地址&#xff1a; https://www.changyouzuhao.cn/9834.html

JS加密解密之JS广告漂浮代码分析

前言 之前有个客户要求帮忙复刻一份广告漂浮代码&#xff0c;我看了下&#xff0c;目标站的广告代码是通过了JS加密后的&#xff0c;经过我解密还原后分析了一下该代码的作用如下。 ;var _0xodDddd,_0xodD_[_0xodD],_0x1d02[_0xodD,\x73\x54\x69\x6d\x65,\x6c\x6f\x61\x64\x5…

【Linux】进程信号的保存 | 自定义捕捉

文章目录 三、信号的阻塞&#xff08;信号的保存&#xff09;1. 信号相关其他常见概念2. 在内核中的表示3. sigset_t类型4. 信号集操作函数函数列表注意事项 5. 读取/修改block位图 - sigprocmask6. 读取pending位图 - sigpending 四、信号捕捉1. 信号捕捉的初步认识自定义捕捉…

Stable Diffusion 绘画入门教程(webui)-提示词

通过上一篇文章大家应该已经掌握了sd的使用流程&#xff0c;本篇文章重点讲一下提示词应该如何写 AI绘画本身就是通过我们写一些提示词&#xff0c;然后生成对应的画面&#xff0c;所以提示词的重要性不言而喻。 要想生成更加符合自己脑海里画面的图片&#xff0c;就尽量按照…

孢子捕捉仪结构

TH-BZ2在现代农业科技的浪潮中&#xff0c;孢子捕捉仪作为一种先进的农业监测设备&#xff0c;正逐渐走进人们的视野。它以其独特的结构和功能&#xff0c;为农作物的健康生长提供了有力保障。那么&#xff0c;孢子捕捉仪究竟是何方神圣&#xff1f;它的结构又是怎样的呢&#…

vulnhub靶场之doubletrouble

一.环境搭建 1.靶场描述 get flags difficulty: easy about vm: tested and exported from virtualbox. dhcp and nested vtx/amdv enabled. you can contact me by email for troubleshooting or questions. This works better with VirtualBox rather than VMware 2.下载地…

详解4大C语言内存函数【超详细建议点赞收藏】

目录 1. memcpy----内存拷贝1.1 函数介绍1.2 函数使用1.3 模拟实现 2. memmove----重叠内存的数据拷贝2.1 函数介绍2.2 函数使用2.3 模拟实现 3. memcmp----内存比较3.1 函数介绍3.2 函数使用 4.memset----内存设置4.1 函数介绍4.2 函数使用 注意&#xff1a;以下4个内存函数在…

VFH特征的使用(二)

一、VFH特征识别 C recognize_objects.h #pragma once #include <pcl/point_cloud.h> #include <pcl/point_types.h> #include <pcl/common/common.h> #include <pcl/common/transforms.h> #include <pcl/console/parse.h> #include <pcl/…