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

📅  最后修改于: 2023-12-03 14:51:23.616000             🧑  作者: Mango

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

简介

本题要求在二叉树中找到从根节点到叶节点的路径中最大的公约数(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)。