把tree转化成graph:因为node的value都是不一样的,可以转化成graph后宽搜就好。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def amountOfTime(self, root: Optional[TreeNode], start: int) -> int:
self.graph = collections.defaultdict(list)
self.que = collections.deque()
self.visited = set()
def makegraph(root, graph):
if not root:return
if root.left:
graph[root.left.val].append(root.val)
graph[root.val].append(root.left.val)
makegraph(root.left, graph)
if root.right:
graph[root.right.val].append(root.val)
graph[root.val].append(root.right.val)
makegraph(root.right, graph)
makegraph(root, self.graph)
def bfs(root, start):
res = -1
self.que.append(start)
self.visited.add(start)
while self.que:
#print(self.que)
size = len(self.que)
res += 1
for _ in range(size):
node = self.que.popleft()
for son_node in self.graph[node]:
if son_node not in self.visited:
self.que.append(son_node)
self.visited.add(son_node)
return res
return bfs(root, start)