📅  最后修改于: 2023-12-03 15:37:39.856000             🧑  作者: Mango
本文介绍如何在二叉树中找到从根到叶的最大 GCD 值。
GCD 是 Greatest Common Divisor 的缩写,意思是最大公约数。在数学中,最大公约数指的是一组数中最大的能同时整除所有数的数。
例如,6 和 9 的最大公约数是 3,因为 3 是 6 和 9 的约数,且没有比 3 更大的公约数。
要找到从根到叶的最大 GCD 值,我们可以使用递归的思路。具体来说,我们从根节点开始遍历二叉树,每当遇到一个叶子节点时,就计算出从根节点到该叶子节点的路径上所有节点的值的 GCD 值,并更新最大 GCD 值。
为了方便计算 GCD 值,我们可以使用 Euclidean 算法,该算法通过连续取余的方式计算两个数的 GCD 值。
以下是一个 Java 实现的例子:
public class Solution {
public int maxGCD(TreeNode root) {
if (root == null) {
return 0;
}
return helper(root, root.val);
}
private int helper(TreeNode node, int gcd) {
if (node.left == null && node.right == null) {
return gcd;
}
int leftGCD = node.left == null ? 0 : helper(node.left, gcd(node.left.val, gcd));
int rightGCD = node.right == null ? 0 : helper(node.right, gcd(node.right.val, gcd));
return Math.max(leftGCD, rightGCD);
}
private int gcd(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
}
其中,maxGCD 方法接受二叉树的根节点,并返回从根到叶的最大 GCD 值。helper 方法是递归的核心实现,计算从当前节点到叶子节点的最大 GCD 值。gcd 方法是 Euclidean 算法的实现,用于计算两个数的 GCD 值。
本文介绍了如何在二叉树中找到从根到叶的最大 GCD 值。通过使用递归和 Euclidean 算法,我们可以轻松地解决这个问题。