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] ]
看到这个题目想到了广搜,只需要一层一层地从左到右进行搜索就行了,代码如下:
import queue
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
q = queue.Queue()
res = []
if root == None:
return []
q.put(root)
levelNodes = 1
while not q.empty():
temp_list = []
nextLevelNodes = 0
while levelNodes > 0:
temp_node = q.get()
temp_list.append(temp_node.val)
if temp_node.left != None:
q.put(temp_node.left)
nextLevelNodes = nextLevelNodes + 1
if temp_node.right != None:
q.put(temp_node.right)
nextLevelNodes = nextLevelNodes + 1
levelNodes = levelNodes - 1
res.append(temp_list)
levelNodes = nextLevelNodes
return res
测评结果
Runtime: 56 ms, faster than 25.42% of Python3 online submissions for Binary Tree Level Order Traversal.
Memory Usage: 13.7 MB, less than 5.17% of Python3 online submissions for Binary Tree Level Order Traversal.
注意,广度优先搜索并没有递归算法,都是借助队列实现的。