LeetCode 1026. Maximum Difference Between Node and Ancestor(Medium)

Description:
Given the root of a binary tree, find the maximum value V for which there exists 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: [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.

Note:

  1. The number of nodes in the tree is between 2 and 5000.
  2. Each node will have value between 0 and 100000.

Analysis:

  1. Define an object variable maxDiff to denote the solution to the problem.
  2. Define a function findMaxDiff(TreeNode node, int max, int min) to find the max value of maxDiff as well as do the pre-order traversal of this tree. Here node represents the current node, maxand min represent the max value and min value of the ancestors of node respecticely.
  3. In each execution of findMaxDiff function:
    ① Update the max, min, maxDiff.
    ② Recall next findMaxDiff function.

Code:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    private int maxDiff;
    public int maxAncestorDiff(TreeNode root) {
        if(root == null) {
            return maxDiff;
        }else{
            findMaxDiff(root, root.val, root.val);
            return maxDiff;
        }
    }
    
    public void findMaxDiff(TreeNode node, int max, int min) {
        if(node == null) {
            return;
        }else{
            if(node.val > max) {
                max = node.val;
            }
            if(node.val < min) {
                min = node.val;
            }
            
            int diff = max - min;
            if(diff > maxDiff) {
                maxDiff = diff;
            }
            
            if(node.left != null) {
                findMaxDiff(node.left, max, min);
            }
            
            if(node.right != null) {
                findMaxDiff(node.right, max, min);
            }
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值