Leetcode 2385. Amount of Time for Binary Tree to Be Infected [Python]

把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)
            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值