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
关于#lc-2385#的问题:nonlocal ans
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
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。希望这个解决方案能够帮助你解决问题!
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报