102. 二叉树的层次遍历
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
思路:
- 根节点为空时,返回[]
- 每层的树节点值存在一个list中,所以需要注意处理每层最右侧的树节点
- current_layer_last指向当前层的最右节点,next_layer_last指向下一层最右节点
- 从队列中pop出节点时,检查左右子节点,如果非空则push到队列中,并且更新下一层最右节点;当pop的节点是当前层最右的节点时,即将存放当前层的所有节点值的list添加到结果中
- 当前层最右节点pop出队列时,在之前加入队列的节点便是下一层的最右节点
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def levelOrder(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
if root == None:
return []
result, temp, queue = [], [], []
queue.append(root)
current_layer_last = root
next_layer_last = root
while len(queue) > 0:
curr_node = queue.pop(0)
temp.append(curr_node.val)
if curr_node.left != None:
queue.append(curr_node.left)
next_layer_last = curr_node.left
if curr_node.right != None:
queue.append(curr_node.right)
next_layer_last = curr_node.right
if curr_node == current_layer_last:
current_layer_last = next_layer_last
result.append(temp)
temp = []
return result

浙公网安备 33010602011771号