每日一道算法题--leetcode 102--二叉树的层序遍历--python

454 阅读1分钟

【题目描述】

【思路解析】

层序遍历是典型的广度优先应用,借助队列实现。可以使用python中collections.deque库,当然也可以不用只用简单的list也ok。看示例中结果的形式,不同层次需要放在不同列表中,因此我们必定要对每个节点属于的层次进行判断,相同层则放在同一列表,统一放入结果中。只要注意这一点,看代码就很直观了。

时间复杂度,空间复杂度都是为线性的,因为只访问每个节点一次。

【源代码】

from collections import deque
class Solution:
   def levelOrder(self, root: TreeNode) -> List[List[int]]:
       if not root:return 
       queue=deque([(1,root)])
       re=[]
       output=[]
       lastdepth=1
       while queue:
           depth,node=queue.popleft()
           if not node:continue
           if not lastdepth==depth:
               re.append(output)
               output=[]
           output.append(node.val)
           queue.append([depth+1,node.left]) 
           queue.append([depth+1,node.right]) 
           lastdepth=depth
       re.append(output)
       return re