⭐️⭐️⭐️
# 題目敘述
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
# 解題思路
# Solution
import java.util.ArrayList; | |
import java.util.Collections; | |
class Solution { | |
public int maxAncestorDiff(TreeNode root) { | |
int Max = 0; | |
ArrayList<TreeNode> tree = new ArrayList<>(); | |
toNode(root, tree); | |
for (TreeNode t : tree) { | |
ArrayList<Integer> arr = new ArrayList<>(); | |
int min = 0; | |
int max = 0; | |
getAllValue(t, arr); | |
if ((arr.size() - 1) != 0) { | |
Collections.sort(arr); | |
min = arr.get(0); | |
max = arr.get(arr.size() - 1); | |
if (Max < Math.abs(t.val - min)) { | |
Max = Math.abs(t.val - min); | |
} | |
if (Max < Math.abs(t.val - max)) { | |
Max = Math.abs(t.val - max); | |
} | |
} | |
} | |
return Max; | |
} | |
public void toNode(TreeNode root, ArrayList<TreeNode> tree) { | |
if (root != null) { | |
tree.add(root); | |
} | |
if (root.left != null) { | |
toNode(root.left, tree); | |
} | |
if (root.right != null) { | |
toNode(root.right, tree); | |
} | |
} | |
public void getAllValue(TreeNode root, ArrayList<Integer> arr) { | |
if (root.left != null) { | |
getAllValue(root.left, arr); | |
} | |
if (root.right != null) { | |
getAllValue(root.right, arr); | |
} | |
if (root != null) { | |
arr.add(root.val); | |
} | |
} | |
} |
單字
** **
!! !!
片語 & 搭配詞
!! !!