宇宙无敌飞天遁地大木木 2025-03-28 10:05 采纳率: 32.5%
浏览 5
已结题

关于#lc-2385#的问题:nonlocal ans


class Solution:
    def amountOfTime(self,root:Optional[TreeNode],start:int)->int:
        ans =  0
        def dfs(node:Optional[TreeNode]):
            nonlocal  ans
            if not node:
                return (False,0)

            left = dfs(node.left)
            right = dfs(node.right)

            if node.val == start:
                r =  max(abs(left[1]),abs(right[1]))
                ans = max(r, ans)
                return (True,0)
            elif left[0] or right[0] :
                r =  abs(left[1]) + abs(right[1]) + 1
                ans = max(r,ans)
                r = max(left[1], right[1]) + 1
                return (True,r)
            else:
                r = -max(abs(left[1]),abs(right[1])) - 1
                return (False,r)

        dfs(root)

        return ans
  • 写回答

2条回答 默认 最新

  • 阿里嘎多学长 2025-03-28 10:05
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    问题解答

    你遇到了 LeetCode 问题 #lc-2385,关于计算从某个节点到所有其他节点的最短时间的题目。

    问题描述:给定一个树的根节点 root 和一个节点 start,计算从 start 节点到所有其他节点的最短时间。

    你提供的代码是:

    class Solution:
        def amountOfTime(self, root: Optional[TreeNode], start: int) -> int:
            ans = ...
    

    解决方案

    这个问题可以使用 BFS 算法解决。首先,我们需要构建一个图,其中每个节点是树的节点,每个边是树的边。然后,我们可以使用 BFS 算法从 start 节点出发,计算到每个其他节点的最短时间。

    核心代码:

    from collections import deque
    
    class Solution:
        def amountOfTime(self, root: Optional[TreeNode], start: int) -> int:
            graph = {}
            for node in root:
                graph[node.val] = []
                for neighbor in node.neighbors:
                    graph[node.val].append(neighbor.val)
    
            queue = deque([(start, 0)])  # (node, time)
            visited = set()
            ans = 0
    
            while queue:
                node, time = queue.popleft()
                if node not in visited:
                    visited.add(node)
                    ans = max(ans, time)
                    for neighbor in graph[node]:
                        if neighbor != start:
                            queue.append((neighbor, time + 1))
    
            return ans
    

    说明

    在上面的代码中,我们首先构建了一个图 graph,其中每个节点是树的节点,每个边是树的边。然后,我们使用 BFS 算法从 start 节点出发,计算到每个其他节点的最短时间。我们使用队列 queue 来存储需要访问的节点和时间,使用 visited 集合来记录已经访问的节点。最后,我们返回计算结果 ans

    希望这个解决方案能够帮助你解决问题!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月5日
  • 已采纳回答 3月28日
  • 修改了问题 3月28日
  • 创建了问题 3月28日