Q:
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
例如:
给定二叉树: [3,9,20,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
返回其层次遍历结果:
[ [3], [9,20], [15,7] ]
链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal/description/
思路:利用队列,由于输出的关系,因此还需要统计一下层数
代码:
class Solution:
def levelOrder(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
res = []
if root == None:
return []
"""利用队列实现树的层次遍历"""
from queue import Queue
q = Queue()
q.put((root,0))
while not q.empty():
node ,level = q.get()
if level == len(res):
res.append([])
res[level].append(node.val)
flag = 0
if node.left != None:
flag += 1
q.put((node.left,level+1))
if node.right != None:
flag += 1
q.put((node.right, level + 1))
return res
另一种解法:也是利用队列的思想,只是统计层数的过程不同
class Solution:
def levelOrder(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
res = []
que = [root]
if root == None:
return res
while que:
tempList = []
for i in range(len(que)):
node = que.pop(0)
tempList.append(node.val)
if node.left:
que.append(node.left)
if node.right:
que.append(node.right)
res.append(tempList)
return res