题目描述
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
例如:
给定二叉树: [3,9,20,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
返回:
[3,9,20,15,7]
提示:
节点总数 <= 1000
本题是二叉树的层序遍历,使用了队列这一数据结构,主要思路就是在遍历每一层的结点的时候,先将它自身输出,然后判断是否存在左右子节点,如果存在的话先后存入队列中。在遍历完当前结点后出队列,然后取队列中下一个结点。
实现过程大致如下:
- 先判断根节点是否为空,如果为空则返回空列表
- 然后将根节点入队列,然后遍历队列
- 每次从队列中取一个元素出来,先输出,然后判断是否存在左右子节点,如果存在则先后入队列
- 将遍历过的结点出队列,然后取队列中的下一个元素。
Python代码如下:
class Solution(object):
def levelOrder(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
if root == None:
return []
res=[]
pre=0
node_list=[]
node_list.append(root)
while pre!=len(node_list):
cur_node=node_list[pre]
pre+=1
res.append(cur_node.val)
if cur_node.left != None:
node_list.append(cur_node.left)
if cur_node.right != None:
node_list.append(cur_node.right)
return res