​力扣解法汇总1026. 节点与其祖先之间的最大差值

news/2024/7/7 20:21:02

目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:力扣


描述:

给定二叉树的根节点 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

解题思路:

* 解题思路:
* 动态规划的思路,每次计算时,传入之前的最大最小值,和当前值计算差值。
* 然后更新最大最小值,继续遍历其左右节点。
 

代码:

public class Solution1026 {
    int maxAbs = 0;

    public int maxAncestorDiff(TreeNode root) {
        search(root.left, root.val, root.val);
        search(root.right, root.val, root.val);
        return maxAbs;
    }


    private void search(TreeNode root, int max, int min) {
        if (root == null) {
            return;
        }
        int abs = Math.max(Math.abs(max - root.val), Math.abs(min - root.val));
        maxAbs = Math.max(abs, maxAbs);
        max = Math.max(root.val, max);
        min = Math.min(root.val, min);
        search(root.left, max, min);
        search(root.right, max, min);
    }
}


http://lihuaxi.xjx100.cn/news/1040633.html

相关文章

Maven(五):Maven的使用——依赖的测试

Maven&#xff08;五&#xff09;&#xff1a;Maven的使用——依赖的测试前言一、实验六&#xff1a;测试依赖的范围1、依赖范围1.1 compile 和 test 对比1.2 compile 和 provided 对比1.3 结论二、实验七&#xff1a;测试依赖的传递性1、依赖的传递性1.1 概念1.2 传递的原则三…

数据结构初阶--顺序表的基本操作

目录前言创建顺序表初始化顺序表检测是否需要扩容打印顺序表销毁顺序表尾插尾删头插头删在pos位置插入x删除pos位置的数据查找指定数据修改i指定下标数字测试完整代码SeqList.htest.cSeqList.c前言 本篇文章我们将对顺序表的一些基本操作进行讲解 创建顺序表 我们先创建一个…

LeetCode:28. 找出字符串中第一个匹配项的下标 ——【1、理解 KMP 算法】

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; &#x1f33b;算法&#xff0c;不如说它是一种思考方式&#x1f340;算法专栏&#xff1a; &#x1f449;&#x1f3fb;123 目录一、&#x1f331;[28. 找出字符串中第一个匹配项的下标](https://leetcode.cn/proble…

【WCH】STM32F103转CH32F203工程驱动DS1302案例

【WCH】STM32F103转CH32F203工程驱动DS1302案例&#x1f4cc;相关篇《STM32基于标准库工程驱动DS1302》&#x1f4cd;《关于CH32F203程序下载方式说明》&#x1f388;有关CH32F203资料手册以及SDK资料&#xff1a;https://www.wch.cn/products/CH32F103.html&#x1f4cc;《【W…

第57讲:MySQL存储过程的概念以及基本使用

文章目录 1.存储过程的概念2.存储过程的基本使用2.1.存储过程的语法格式2.2.创建一个存储过程2.3.调用存储过程2.4.查看db_1数据库中有哪些存储过程2.5.查询存储过程的定义语句2.6.删除存储过程1.存储过程的概念 存储过程指的是能够完成特定功能的SQL语句集合,当程序需要完成…

【C语言】分支语句和循环语句(下)

【C语言】分支语句和循环语句&#xff08;下&#xff09;1.for循环1.2 语法1.3 break和continue在for循环中1.4 for语句的循环控制变量1.5 一些for循环的变种1.6一道笔试题2. do……while&#xff08;&#xff09;循环2.1 do语句的语法2.2 do语句的特点2.3 do while循环中的bre…

es 和 mysql 和 odps hadoop hbase的区别,算法中的特征的保存

父文章 hbase hive elasticsearch(elsearch) mysql mongodb 技术选型_个人渣记录仅为自己搜索用的博客-CSDN博客 Elasticsearch的增删改查(含数组操作) - from chatgpt_个人渣记录仅为自己搜索用的博客-CSDN博客 学习Elasticsearch必需了解的十个概念_梦想画家的博客-CSDN博客…

哨兵模式自启动

哨兵模式的配置具体看这里 首先在redis的解压目录下找到redis_init_script文件 #这个文件在这个目录下 [rootcentos7964 utils]# pwd /usr/local/src/redis-5.0.7/utils #将该文件复制到/etc/init.d/目录下&#xff0c;并重命名为redis_init cp redis_init_script /etc/init.…