📅  最后修改于: 2023-12-03 14:51:23.616000             🧑  作者: Mango
本题要求在二叉树中找到从根节点到叶节点的路径中最大的公约数(GCD)。
对于一条从根节点到叶节点的路径,可以通过递归进行查找,计算出该路径的所有节点值的最大公约数。最后将所有路径中的最大公约数取最大值即可。
具体实现可以参考下面的代码:
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def gcd(a, b):
if b == 0:
return a
return gcd(b, a % b)
def findMaxGcd(root):
if not root:
return 0
return dfs(root, root.val)
def dfs(root, max_gcd):
if not root.left and not root.right:
return max_gcd
if root.left:
left_gcd = gcd(max_gcd, root.left.val)
left_max_gcd = dfs(root.left, left_gcd)
else:
left_max_gcd = 0
if root.right:
right_gcd = gcd(max_gcd, root.right.val)
right_max_gcd = dfs(root.right, right_gcd)
else:
right_max_gcd = 0
return max(left_max_gcd, right_max_gcd)
假设二叉树共有n个节点,每条路径的长度不超过n,所以时间复杂度为O(nlogn)。具体来说,每个节点最多被遍历一次,而对于每条路径,需要计算其所有节点值的最大公约数。计算最大公约数的时间复杂度为logn。
假设二叉树共有n个节点,递归深度不超过n,所以空间复杂度为O(n)。