当前位置:   article > 正文

图遍历问题:感染二叉树需要的总时间

染二叉树需要的总时间

6154. 感染二叉树需要的总时间

给你一棵二叉树的根节点 root ,二叉树中节点的值 互不相同 。另给你一个整数 start 。在第 0 分钟,感染 将会从值为 start 的节点开始爆发。

每分钟,如果节点满足以下全部条件,就会被感染:

节点此前还没有感染。
节点与一个已感染节点相邻。
返回感染整棵树需要的分钟数。

 解题思路:

1,求出每个节点对应的父节点

2,从start节点开始,BFS思想,分别感染左,右,父节点,并实时更已感染的节点。

3,BFS通过栈的形式,记录每次将要感染的节点。当栈为空,即感染了所有节点。

  1. # Definition for a binary tree node.
  2. # class TreeNode:
  3. # def __init__(self, val=0, left=None, right=None):
  4. # self.val = val
  5. # self.left = left
  6. # self.right = right
  7. class Solution:
  8. def amountOfTime(self, root: Optional[TreeNode], start: int) -> int:
  9. parents={}
  10. def dfs(root,pa):
  11. if not root:
  12. return
  13. parents[root]=pa
  14. if root.val==start:
  15. self.start=root
  16. dfs(root.left,root)
  17. dfs(root.right,root)
  18. return
  19. dfs(root,None)
  20. ans=-1
  21. vist={None,self.start}
  22. q=[self.start]
  23. while q:
  24. ans+=1
  25. tmp=q
  26. q=[]
  27. for node in tmp:
  28. for x in node.left,node.right,parents[node]:
  29. if x not in vist:
  30. vist.add(x)
  31. q.append(x)
  32. return ans

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/510083
推荐阅读
相关标签
  

闽ICP备14008679号