【leetcode】102:二叉树的层序遍历
这个题目比较基础,可以对树的广度优先搜索的模版稍作更改,就可以得到我们的答案了。题目如下:
解答如下:
# 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 levelOrder(self, root: TreeNode) -> List[List[int]]: if not root: return [] #跟结点入queue queue = [root] res = [] while queue: res.append([node.val for node in queue]) #存储当前层的孩子节点列表 ll = [] #对当前层的每个节点遍历 for node in queue: #如果左子节点存在,入队列 if node.left: ll.append(node.left) #如果右子节点存在,入队列 if node.right: ll.append(node.right) #后把queue更新成下一层的结点,继续遍历下一层 queue = ll return res
方法二:
def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]: if root is None: return [] ans=[] q=[root] #队列的特点:先进先出 #只要队列里面有node,则不断从头开始遍历这个队列 while q: #vals用来装载每一层的node数字 vals=[] #q的length不会再循环当中发生变化 for _ in range(len(q)): #取出队列最前面的node node=q.pop(0) #装进每一层的vals当中 vals.append(node.val) #把当前node的下一层的节点装入队列当中 if node.left: q.append(node.left) if node.right: q.append(node.right) ans.append(vals) return ans
对二叉树层序遍历的模版如下:
def BFS(root): if root: res = [] queue = [root] while queue: currentNode = queue.pop(0) res.append(currentNode.val) if currentNode.left: queue.append(currentNode.left) if currentNode.right: queue.append(currentNode.right) return res