给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
思路:
首先观察返回值格式为一个二维数组,第 i 行表示二叉树的第 i 层,可以使用队列来协助进行层序遍历,队列每一次也传入一个一维数组[ node, level],其中node表示二叉树的节点,level表示该节点所处的层数,每遍历至一个节点就将该节点的左右子节点信息存入队列中去,再从队列中取出一组信息,依次循环。
注意result的行数要随着level的增加而增加,每向下遍历一层,result行数+1
# Definition for a binary tree node. # class TreeNode: # 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]] """ import queue result = [[]] q = queue.Queue() if root == None: return [] q.put([root, 0]) # 第一个数据为节点,第二个数据为层数 while not q.empty(): temp = q.get() node = temp[0] # 节点 level = temp[1] # 层数 if level == len(result): result.append([]) result[level].append(node.val) if node.left: q.put([node.left, level + 1]) if node.right: q.put([node.right, level + 1]) return result