LeetCode //C - 1026. Maximum Difference Between Node and Ancestor

1026. Maximum Difference Between Node and Ancestor

Given the root of a binary tree, find the maximum value v for which there exist different nodes a and b where v = |a.val - b.val| and a is an ancestor of b.

A node a is an ancestor of b if either: any child of a is equal to b or any child of a is an ancestor of b.

Example 1:

Input: root = 8,3,10,1,6,null,14,null,null,4,7,13
Output: 7
Explanation: We have various ancestor-node differences, some of which are given below :

|8 - 3| = 5

|3 - 7| = 4

|8 - 1| = 7

|10 - 13| = 3

Among all possible differences, the maximum value of 7 is obtained by |8 - 1| = 7.

Example 2:

Input: root = 1,null,2,null,0,3
Output: 3

Constraints:
  • The number of nodes in the tree is in the range 2, 5000.
  • 0 < = N o d e . v a l < = 10 5 0 <= Node.val <= 10^5 0<=Node.val<=105

From: LeetCode

Link: 1026. Maximum Difference Between Node and Ancestor


Solution:

Ideas:

For each node, keep track of:

  • the minimum value seen on the path from the root to this node
  • the maximum value seen on the path from the root to this node

Then the maximum ancestor difference on that path is:

  • curMax - curMin

So during DFS:

  • update curMin and curMax with the current node value
  • continue to left and right children
  • when reaching NULL, return the difference for that path
Code:
c 复制代码
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */

static int max(int a, int b) {
    return a > b ? a : b;
}

static int min(int a, int b) {
    return a < b ? a : b;
}

static int dfs(struct TreeNode* node, int curMin, int curMax) {
    if (node == NULL) {
        return curMax - curMin;
    }

    curMin = min(curMin, node->val);
    curMax = max(curMax, node->val);

    int leftAns = dfs(node->left, curMin, curMax);
    int rightAns = dfs(node->right, curMin, curMax);

    return max(leftAns, rightAns);
}

int maxAncestorDiff(struct TreeNode* root) {
    return dfs(root, root->val, root->val);
}
相关推荐
想吃火锅10055 小时前
【leetcode】54. 螺旋矩阵
算法·leetcode·矩阵
wuminyu5 小时前
JVM利用io_uring优化堆外内存性能原理剖析
java·linux·c语言·jvm·c++
想吃火锅10056 小时前
【leetcode】300. 最长递增子序列
算法·leetcode·职场和发展
数模竞赛Paid answer6 小时前
2026年电工杯数学建模A题绿电直连型电氢氨园区优化运行求解全过程论文及程序
算法·数学建模·电工杯
疯狂打码的少年6 小时前
【数据结构】串的模式匹配:KMP算法(重点)
数据结构·笔记·算法
晚风醉蝶7 小时前
第零篇-算法全景图
算法
疯狂打码的少年7 小时前
【数据结构】树的基本概念与二叉树定义
java·数据结构·笔记·算法
webmote337 小时前
用 NVIDIA Nemotron 3 Super + .NET 构建有记忆的多轮对话
后端·算法
Keven_118 小时前
算法札记:区分稀疏图与稠密图在经验上的数学计算差异
算法·稠密图·稀疏图
Sagittarius_A*8 小时前
后量子密码|前置基础 03|数字签名运行逻辑:签名签发、核验原理与实际业务应用
算法·信息安全·密码学·数字签名·后量子密码