102. Binary Tree Level Order Traversal
题目描述
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
For example: Given binary tree [3,9,20,null,null,15,7]
,
3
/ \
9 20
/ \
15 7
return its level order traversal as:
[
[3],
[9,20],
[15,7]
]
分析
将二叉树中的节点逐层按照从左到右的顺序返回,每一层的节点存入一个列表中,即广度优先遍历。一般的BFS使用队列结构来实现,利用其先入先出的特点,将当前节点的邻居节点全部加入队列;每次访问队列的头元素。
本题中,定义ans保存答案列表;level保存欲访问的节点指针集合;在每轮循环中取出level中节点的val属性,加入ans列表中。
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def levelOrder(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
ans,level=[],[root] #初始化答案为空,从根所在的层开始遍历
while root and level: #当根为空时,不进行循环,返回空答案;当下一层中无节点时,退出循环
ans.append([node.val for node in level]) #将当前层的节点值组成一个列表,加入答案列表中
LRpair=[(node.left,node.right) for node in level] #将当前级中所有节点的左右儿子以【树节点对】的形式加入列表
level=[leaf for LR in LRpair for leaf in LR if leaf] #将(树节点对)中所有非空节点取出,组成下一层节点列表(作为下一次循环的遍历层)
return ans