赞
踩
给你一棵二叉树的根节点 root ,二叉树中节点的值 互不相同 。另给你一个整数 start 。在第 0 分钟,感染 将会从值为 start 的节点开始爆发。
每分钟,如果节点满足以下全部条件,就会被感染:
节点此前还没有感染。
节点与一个已感染节点相邻。
返回感染整棵树需要的分钟数。
解题思路:
1,求出每个节点对应的父节点
2,从start节点开始,BFS思想,分别感染左,右,父节点,并实时更已感染的节点。
3,BFS通过栈的形式,记录每次将要感染的节点。当栈为空,即感染了所有节点。
- # 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:
- parents={}
- def dfs(root,pa):
- if not root:
- return
- parents[root]=pa
- if root.val==start:
- self.start=root
- dfs(root.left,root)
- dfs(root.right,root)
- return
-
- dfs(root,None)
- ans=-1
- vist={None,self.start}
- q=[self.start]
- while q:
- ans+=1
- tmp=q
- q=[]
- for node in tmp:
- for x in node.left,node.right,parents[node]:
- if x not in vist:
- vist.add(x)
- q.append(x)
- return ans
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。