1026. 节点与其祖先之间的最大差值
题目描述
解题思路
方法一:
当前路径的最大最小值作为局部变量参数,不停变换。
方法二:回溯法
max_val, min_val记录子树到叶子节点最大、最小值
叶子节点计算最大差值
代码实现
# 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 maxAncestorDiff(self, root: TreeNode) -> int:
# max_val, min_val记录子树到叶子节点最大、最小值
self.res = float("-inf")
def helper(root, max_val, min_val):
if not root:
return
max_val = max(max_val, root.val)
min_val = min(min_val, root.val)
self.res = max(self.res, abs(max_val - min_val))
helper(root.left, max_val, min_val)
helper(root.right, max_val, min_val)
helper(root, float("-inf"), float("inf"))
return self.res
def maxAncestorDiff1(self, root: TreeNode) -> int:
# 回溯法
# max_val, min_val记录子树到叶子节点最大、最小值
# 叶子节点计算最大差值
self.max_val = float("-inf")
self.min_val = float("inf")
self.seq = []
self.res = float("-inf")
def pre_order(root):
if not root:
return
self.seq.append(root.val)
self.max_val = max(self.seq)
self.min_val = min(self.seq)
if not root.left and not root.right:
self.res = max(self.res, abs(self.max_val - self.min_val))
pre_order(root.left)
pre_order(root.right)
self.seq.pop()
pre_order(root)
return self.res