LeetCode 1026. 节点与其祖先之间的最大差值

news2024/10/7 18:20:20

【LetMeFly】1026.节点与其祖先之间的最大差值

力扣题目链接:https://leetcode.cn/problems/maximum-difference-between-node-and-ancestor/

给定二叉树的根节点 root,找出存在于 不同 节点 A 和 B 之间的最大值 V,其中 V = |A.val - B.val|,且 A 是 B 的祖先。

(如果 A 的任何子节点之一为 B,或者 A 的任何子节点是 B 的祖先,那么我们认为 A 是 B 的祖先)

 

示例 1:

输入:root = [8,3,10,1,6,null,14,null,null,4,7,13]
输出:7
解释: 
我们有大量的节点与其祖先的差值,其中一些如下:
|8 - 3| = 5
|3 - 7| = 4
|8 - 1| = 7
|10 - 13| = 3
在所有可能的差值中,最大值 7 由 |8 - 1| = 7 得出。

示例 2:

输入:root = [1,null,2,null,0,3]
输出:3

 

提示:

  • 树中的节点数在 2 到 5000 之间。
  • 0 <= Node.val <= 105

方法一:深度优先搜索DFS

有关深度优先搜索的题解有很多,本题也可以参考二叉树的前序遍历的深度优先搜索的方式进行求解。

在深度优先搜索的过程中,我们额外传递两个参数:分别是当前所有祖先节点的最大值 和 最小值。

这样,我们求出当前节点与最大值或最小值的绝对值之差,在所有节点的绝对值之差中,最大的那个即为答案。

  • 时间复杂度 O ( 节点个数 ) O(节点个数) O(节点个数)
  • 空间复杂度 O ( 树的深度 ) O(树的深度) O(树的深度)

AC代码

C++

class Solution {
private:
    int ans = 0;

    void dfs(TreeNode* root, int M, int m) {
        if (!root) {
            return;
        }
        ans = max(ans, abs(root->val - M));
        ans = max(ans, abs(root->val - m));
        M = max(M, root->val);
        m = min(m, root->val);
        dfs(root->left, M, m);
        dfs(root->right, M, m);
    }
public:
    int maxAncestorDiff(TreeNode* root) {
        dfs(root, root->val, root->val);
        return ans;
    }
};

Python

# from typing import Optional


# # Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right


class Solution:
    def __init__(self) -> None:
        self.ans = 0
    
    def dfs(self, root: Optional[TreeNode], M: int, m: int) -> None:
        if not root:
            return
        self.ans = max(self.ans, abs(root.val - M), abs(root.val - m))
        M = max(M, root.val)
        m = min(m, root.val)
        self.dfs(root.left, M, m)
        self.dfs(root.right, M, m)

    def maxAncestorDiff(self, root: Optional[TreeNode]) -> int:
        self.dfs(root, root.val, root.val)
        return self.ans

同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/130218910

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

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

相关文章

《花雕学AI》24:如何用万能Prompt公式与ChatGPT进行高效的对话测试

引言 你是否想要与人工智能进行有趣、有价值、有说服力的对话&#xff1f;你是否想要使用ChatGPT这个强大而灵活的对话生成器来创造出任何类型和主题的对话&#xff1f;如果是这样&#xff0c;那么你需要了解一个简单而强大的工具&#xff0c;就是万能Prompt公式。 万能Promp…

微软office认证课程

感谢阅读 非原创声明&#xff0c;根据微软课程学习理解而已Get started with Microsoft 365Work Smarter with Microsoft Word与 Microsoft Word 更加智能地工作Microsoft 365 SubscriptionsMicrosoft 365 订阅个人补充Exercise: Finding Help and changing account settings练…

cpp 程序与 c 程序的相互调用(extern “C“ 的使用)

实际在编译的过程中&#xff0c;.cpp 文件调用 .c文件中的函数会出错。假设代码结构如下&#xff1a; 目录 一、编译过程分析 1、预处理 2、编译 3、汇编 4、链接 二、问题解决 1、解决方案 2、解决思路 一、编译过程分析 1、预处理 该阶段头文件会被展开&#xff0c…

FPGA学习笔记(二):时序逻辑之计数器

与组合逻辑&#xff08;给定输入&#xff0c;输出是确定的&#xff0c;与时间无关&#xff09;相比较&#xff0c;时序逻辑不仅仅与输入信号相关&#xff0c;还与时钟信号相关。 D触发器&#xff1a;在上升沿时&#xff08;CLK&#xff09;才将输出&#xff08;Q&#xff09;修…

Failed to load property source from location ‘classpath:/application.yaml‘

问题 项目起动时&#xff0c;找不到yaml&#xff0c;各种处理还是没有解决&#xff0c;比如&#xff0c;clean&#xff0c;重启电脑&#xff0c;检查utf8等。 同事拉的新代码又是正常可以跑&#xff0c;这就有点奇怪了。 11:07:39.682 [main] ERROR org.springframework.boot.…

【19】linux进阶——后台运行()和nohup命令

大家好&#xff0c;这里是天亮之前ict&#xff0c;本人网络工程大三在读小学生&#xff0c;拥有锐捷的ie和红帽的ce认证。每天更新一个linux进阶的小知识&#xff0c;希望能提高自己的技术的同时&#xff0c;也可以帮助到大家 另外其它专栏请关注&#xff1a; 锐捷数通实验&…

分享自己接私活常用的开源系统

目前开源系统是JNPF框架。技术栈上是SpringBoot、SpringCloud、Spring Web、MyBatis、Swagger、Vue、Element。 这些都是比较主流的技术&#xff0c;无论是技术层面的先进性还是学习难度都是比较低的&#xff0c;目前网络上有大量可供参考学习的资料。 并且它支持前后端分离和…

Ceph入门到精通-Ceph如何扩展到超过十亿个对象?

Ceph如何扩展到超过十亿个对象&#xff1f;-ceph部署多少个节点 (51cto.com) 越来越多的组织被要求管理数十亿个文件和几百上千PB的数据。无论是在公共云还是本地环境中&#xff0c;Ceph对象存储都是值得考虑的一个选项。本篇文章将通过七部分的精选内容为下面这些问题提供答案…

vue3+echarts实现世界地图以及轨线(label使用fomatter+rich动态添加图片及背景色,以及label如何添加动态边框色)

背景 最近项目开发&#xff0c;需要开发一个世界地图&#xff0c;并且实现经纬度对应的点对点轨线动效&#xff0c;效果如下&#xff1a; 问题 如何在刚打开页面的时候就显示地点名称label如何同时添加图片和背景色label怎么动态修改字体颜色及图片以及动态边框色添加动效及…

YumRepo Error: All mirror URLs are not using ftp, http[s] or file解决办法

文章目录 一、问题背景二、问题原因三、解决方法 一、问题背景 CentOS6.5利用yum -y install gcc命令安装程序报错YumRepo Error: All mirror URLs are not using ftp, http[s] or file.Eg. Invalid release/repo/arch combination/ removing mirrorlist with no valid mirror…

maven安装教程(结合eclipse和IDEA)

一.安装maven 本文须知:安装maven环境之前要先安装java jdk环境(没有安装java环境的可以先去看安装JAVA环境的教程)Maven 3.3+ require JDK 1.7 及以上。 第一步:下载maven(本教程安装的是3.8.4) 官方下载链接:https://maven.apache.org/download.cgi Binary是可执行版本…

电子台账:生成的数据和图表导出到一个excel表中

目录 1 数据选择 1.1 选择1行数据 1.2 选择1列数据 2 图表设置 3 数据导出 为了便于进行数据分析和数据展示&#xff0c;可以把生成的汇总数据生成图表&#xff0c;然后对图表进行定制修改&#xff0c;最后把数据和图表一起导出到一个excel表中。 程序目前支持两种数据作…

【C++学习笔记】函数

值传递 值传递&#xff1a;函数调用时实参将数值传入给形参 做值传递时函数的形参发生改变&#xff0c;并不会影响实参 因为形参的作用域在函数内只有在调用函数时才会为其分配内存&#xff0c;函数调用结束后释放函数内的变量内存。 #include<iostream> using namespa…

mybatis04-mybatis缓存、分页插件、注解开发(一对一、多对一、多对多)

mybatis04 mybatis 缓存 一、mybatis 缓存概述 1、缓存 ​ 缓存 是存在于内存中的临时数据&#xff0c;使用缓存的目的是&#xff1a;减少和数据库的交互次数&#xff0c;提高执行效率。 2、mybatis 缓存 ​ mybatis 与 大多数的持久层框架一样&#xff0c;提供了缓存策略…

网络视频监控如何入门?如何安装和配置、设备选择和实时监控?

网络视频监控是一种先进的安全技术&#xff0c;它可以通过互联网连接到远程视频服务器&#xff0c;使用户可以随时随地监控所关注的地点。本文将介绍网络视频监控的基础入门知识&#xff0c;包括安装和配置、设备选择和实时监控等方面。 一、安装和配置 在进行网络视频监控前&…

PMP项目管理-[第五章]范围管理

范围管理知识体系&#xff1a; 规划范围管理&#xff1a; 收集需求&#xff1a; 定义范围&#xff1a; 创建WBS&#xff1a; 确认范围&#xff1a; 控制范围&#xff1a; 5.1 范围管理 产品范围&#xff1a;某项产品、服务或成果所具有的特性和功能 项目范围&#xff1a;为交付…

商品价格监控业务场景,API数据分析

商品价格监控指的是对特定商品价格进行实时监控和跟踪&#xff0c;及时更新最新价格并分析价格变化的行为。这种监控可以帮助企业及时了解市场行情&#xff0c;并根据价格变化情况做出相应的调整&#xff0c;以更好地应对市场变化。 一般来说&#xff0c;商品价格监控需要以下…

使用RabbitMq实现延迟队列

下载RabbitMq&#xff1a;本地安装rabbitmq_王胖胖1112的博客-CSDN博客 1、pom文件引入 <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit-test</artifactId> <scope>test&…

关于小程序云开发cms内容管理无法使用,无法同步内容模型到云开发数据库的解决方案

小程序官方最近又搞大动作了&#xff0c;偷偷的升级的云开发cms&#xff08;内容管理&#xff09;以下都称cms&#xff0c;不升级不要紧&#xff0c;这一升级&#xff0c;就导致我们没有办法正常使用cms了。如果你开通完cms带下面这个标识的话&#xff0c;就代表你是新版本&…

NVT | NVT SDK光敏电阻ADC配置与调试

NVT | NVT SDK光敏电阻ADC配置与调试 时间:2023-04-21 文章目录 `NVT` | `NVT` `SDK`光敏电阻`ADC`配置与调试1.参考2.电路原理图3.代码编写3-1.配置ADC通道3-2.初始化ADC3-3.ADC值读取3-4.ADC读取测试4.头文件1.参考 1.光敏电阻:原理及作用、符号及参数、选型及电路 2.