📌  相关文章
📜  在二叉树中找到从根到叶的最大GCD值(1)

📅  最后修改于: 2023-12-03 15:37:39.864000             🧑  作者: Mango

在二叉树中找到从根到叶的最大GCD值

在二叉树中找到从根到叶节点路径上所有节点值的最大公约数(GCD)。

思路

我们可以使用递归的方式来解决此问题。从根节点开始,将当前节点的值作为 GCD 的初始值,然后将这个值与左右子节点的值逐一求 GCD,找出其中最大的一个值即为从根到叶节点路径上所有节点值的最大公约数。

代码实现
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

class Solution:
    def findMaxGcd(self, root: TreeNode) -> int:
        if not root:
            return 0
        return self.helper(root, root.val)
    
    def helper(self, node, gcd):
        if not node.left and not node.right:
            return gcd
        leftGcd, rightGcd = 0, 0
        if node.left:
            leftGcd = self.helper(node.left, self.getGcd(gcd, node.left.val))
        if node.right:
            rightGcd = self.helper(node.right, self.getGcd(gcd, node.right.val))
        return max(leftGcd, rightGcd)
    
    def getGcd(self, a, b):
        while b:
            a, b = b, a % b
        return a
复杂度分析

由于这是一个递归解决方案,因此它具有线性复杂度,在最坏的情况下需要访问每个节点。因此时间复杂度为 O(n)。由于这个过程不需要使用额外存储空间,空间复杂度为 O(1)。