6.21二叉搜索树的最近公共祖先(L235-M)

算法:

可以和上一题一样做,但是最好还是要用上二叉搜索树的特性

遍历顺序无所谓,因为中不用写逻辑代码。

假如p=3,q=5

若当前遍历节点(比如6)比p和q都大,说明p和q一定在当前节点的左子树里面

若当前遍历节点(比如2)比p和q都小,说明p和q一定在当前节点的右子树里面

若当前遍历节点(比如4)在p和q之间,说明当前节点为p和q的公共祖先。

会是最近的公共祖先吗?

会。比如遍历到5,p和q一定在5的左右。若继续往左遍历,则会错过q;若继续往右遍历,则会错过p。

调试过程:

原因:

在这里,最后的 `else return root;` 实际上只是与第二个 `if` 语句相关联的,而不是与第一个 `if` 语句。因此,当第二个 `if` 语句不成立时,就会执行 `else return root;`,这可能会导致在第一个 `if` 语句不成立时,没有返回任何值的情况。

通过移除 `else`,可以确保无论第一个 `if` 是否成立,最后都会执行 `return root;`,从而解决了 “error: missing return statement” 的问题。

正确代码:

/**
 * 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;
        //root.val大于p和q,说明要向左遍历
        if (root.val > q.val && root.val > p.val) {
            TreeNode left = lowestCommonAncestor(root.left, p, q);
            if (left != null) return left;//return其实就是回溯
        }
        //root.val小于p和q,说明要向右遍历
        if (root.val < q.val && root.val < p.val) {
            TreeNode right = lowestCommonAncestor(root.right, p, q);
            if (right != null) return right;//return其实就是回溯
        }                
        return root;
        //由于所有节点的值都是唯一的,所以只剩下root.val在p.val和q.val之间的情况
 
    }
}

时间空间复杂度:

时间复杂度

最低公共祖先(LCA)的时间复杂度是 O(h),其中 h 是二叉树的高度。在最坏的情况下,二叉树是一个非平衡树,高度接近于节点的数量,因此时间复杂度为 O(n),其中 n 是节点的数量。

空间复杂度

空间复杂度主要取决于递归调用的深度。在最坏的情况下,递归调用的深度等于树的高度,因此空间复杂度为 O(h)。最坏的情况下,二叉树是一个非平衡树,高度接近于节点的数量,因此空间复杂度为 O(n),其中 n 是节点的数量。

这段代码使用了递归来遍历二叉树,因此时间复杂度取决于树的高度,空间复杂度取决于递归调用的深度。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python数值类型(整形、浮点型和复数)及其用法

数值类型是计算机程序最常用的一种类型&#xff0c;既可用于记录各种游戏的分数、游戏角色的生命值、伤害值等&#xff0c;也可记录各种物品的价格、数量等&#xff0c;Python 提供了对各种数值类型的支持&#xff0c;如支持整型、浮点型和复数。 Python整型 Python 3 的整型…

Intel® Enclave Operation(三)

文章目录 前言一、Constructing an Enclave1.1 ECREATE1.2 EADD and EEXTEND Interaction1.3 EINIT Interaction1.4 Intel SGX Launch Control Configuration 二、Enclave Entry and Exiting2.1 Controlled Entry and Exit2.2 Asynchronous Enclave Exit (AEX)2.3 Resuming Exe…

web服务器之——建立两个基于ip地址访问的网站

目录 准备工作&#xff1a;web服务器搭建 第一步&#xff1a;挂载 第二步&#xff1a;编辑配置文件 第三步&#xff1a;安装软件包 第四步&#xff1a;启动httpd 查看配置文件&#xff1a; 第五步&#xff1a;设置防火墙状态&#xff1a; 重启服务: 查看状态&#xff1…

自己开发App,如何能兼顾效率与体验?

今天来聊聊一个现实但不简单的问题&#xff1a;如何能够做到自己开发App。 首先&#xff0c;在搜索引擎搜索“自己开发App”&#xff0c;会冒出一大堆类“手把手”的内容&#xff0c;超级详细、稍微浏览一些内容的引言部分&#xff0c;乍一看好像还挺合理&#xff0c;但点击进…

多地远程视频监控,如何集中连接与管理?

如今&#xff0c;远程视频监控已广泛应用于商超零售、酒店、工厂工地、IT机房、农业生产、医疗保健、公共安全等多种场景。其中&#xff0c;网络通信技术是远程监控技术中最为关键的技术&#xff0c;远程监控数字化应用的增长对广域网等基础IT建设提出更高的需求。 以广东某连锁…

python实战教学之python版“张万森,好久不见”

前言 WINTER IS COMING 最近《一闪一闪亮星星》的电影在火热预售中&#xff0c;家人们抢到票了嘛&#xff0c;前两天小编写了一篇“张万森&#xff0c;下雪了”的文章后&#xff0c;收到了不少小伙伴的反馈&#xff1a;“代码的运行结果只有文字&#xff0c;没有雪花啊”&#…

气温波动 C语言xdoj45

问题描述 最近一段时间气温波动较大。已知连续若干天的气温&#xff0c;请给出这几天气温的最大波动值是多少&#xff0c;即在这几天中某天气温与前一天气温之差的绝对值最大是多少。 输入说明 输入数据分为两行。 第一行包含了一个整数n&#xff0c;表示给出了连续n天…

JNPF低代码——全源码、免费部署的开发框架

低代码平台的概念很火爆&#xff0c;产品也是鱼龙混杂。 对于开发人员来说&#xff0c;在使用绝大部分低代码平台的时候都会遇到一个致命的问题&#xff1a;我在上面做的项目无法得到源码&#xff0c;完全黑盒。一旦我的需求平台满足不了&#xff0c;那就是无解。 与其他平台的…

便签电脑版下载教程,电脑便签用哪个

现在大家所熟知的电脑便签软件通常以电脑软件为主&#xff0c;过去那种贴满五颜六色的&#xff0c;几百张成一叠的桌面便利贴&#xff0c;可以实现随处粘贴&#xff0c;现在几乎已经被淘汰了&#xff0c;取而代之的是科技化的电脑便签软件。 在查找电脑便签软件时&#xff0c;…

helpdesk的工作流程是什么?

helpdes在IT部门中是一个非常重要的部门&#xff0c;负责为用户提供技术支持和问题解决方案。为了有效地提供这些服务&#xff0c;helpdesk需要建立一个清晰而高效的工作流程。本文将介绍helpdesk工作的典型流程&#xff0c;并探讨每个阶段的重要性。 1、用户报告问题 通常&…

RCG Self-conditioned Image Generation via Generating Representations

RCG: Self-conditioned Image Generation via Generating Representations TL; DR&#xff1a;将图像的无监督表征作为&#xff08;自&#xff09;条件&#xff08;而非是将文本 prompt 作为条件&#xff09;&#xff0c;生成与原图语义内容一致的多样且高质量结果。视觉训练能…

Android :Paging (分页)加载数据-简单应用

1.Paging介绍&#xff1a; 安卓Paging是一种分页加载数据的方法&#xff0c;它基于无限滚动模式而设计&#xff0c;可以帮助应用更高效地利用网络带宽和系统资源。Paging库可以加载和显示来自本地存储或网络中更大的数据集中的数据页面&#xff0c;适用于以列表的形式加载大量…

VSCode配置记录

1. 修改代码背景颜色 1&#xff09;Shift Command P&#xff0c;搜索框输入&#xff1a;settings.json 2&#xff09;输入配置 {"workbench.colorCustomizations": {"editor.lineHighlightBackground": "#86e9e93d", # 修改鼠标所在行背景色…

自动化测试 —— Web自动化三大报错

Web自动化三大报错有哪些呢&#xff1f;接下来给大家讲讲。 Web自动化三大报错&#xff08;Exception&#xff09; 1. Exception1&#xff1a;no such element&#xff08;没有在页面上找到这个元素&#xff09; reason1&#xff1a;元素延迟加载了 solution&#xff1a; …

功率放大器有哪些功能和作用

功率放大器是一种电子设备&#xff0c;主要用于将输入的低功率信号放大为更大的功率信号。功率放大器的主要功能和作用包括&#xff1a; 信号放大&#xff1a;功率放大器可以将输入的低功率信号放大为更大的功率信号。这对于一些需要输出更大功率的应用来说非常重要&#xff0c…

外包干了3年,技术退步太明显了。。。。。

先说一下自己的情况&#xff0c;本科生生&#xff0c;18年通过校招进入武汉某软件公司&#xff0c;干了差不多3年的功能测试&#xff0c;今年国庆&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能…

腾讯云服务器购买:腾讯云服务器购买指南一步步全流程攻略

腾讯云服务器购买流程直接在官方秒杀活动上购买比较划算&#xff0c;在云服务器CVM或轻量应用服务器页面自定义购买价格比较贵&#xff0c;但是自定义购买云服务器CPU内存带宽配置选择范围广&#xff0c;活动上购买只能选择固定的活动机&#xff0c;选择范围窄&#xff0c;但是…

正点原子高速无线下载器下载bin文件

有时候需要帮忙调试&#xff0c;直接下载写好代码的bin文件比较快&#xff0c;所以找到这个方式&#xff0c;关于keil如何生成bin文件可以看上篇文章&#xff0c;其他IDE生成方式我就遇到再说了&#xff0c;可以自己在网上搜教程。 关于正点原子的高速无线下载器可以去下载官方…

vrep学习笔记8——将vrep中graph文件导出为csv.文件,并导入matlab中绘制曲线图

在机械臂仿真过程中&#xff0c;使用vrep中的graph图表功能绘制出的曲线不够清晰&#xff0c;如何将graph中的图表数据导出为csv文件&#xff0c;并使用matlab绘制出同样的曲线图呢&#xff1f; 1.将vrep中的graph导出为csv文件 首先选中graph如下 选择file-export-selected g…

报错:AttributeError: ‘DataFrame‘ object has no attribute ‘reshape‘

这个错误通常发生在你试图在 Pandas DataFrame 上直接使用 reshape 方法时。reshape 方法通常与 NumPy 数组相关联&#xff0c;而不是 Pandas DataFrame。 如果你正在使用 Pandas DataFrame 并希望重新塑造它&#xff0c;你应该使用 Pandas 的重塑函数&#xff0c;如 pivot、m…