是二叉树层序遍历的应用,基础代码和二叉树的层序遍历一致,用了广度优先搜索算法(bfs),详细解答可见我对层序遍历的解答,与层序遍历的区别在于在得到了层序遍历的输出以后,对于其中的奇数层对应的数组进行翻转。需要注意的是,在得到的结果进行翻转更方便,在bfs进行翻转较难理解,容易出错。
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param pRoot TreeNode类
# @return int整型二维数组
#
class Solution:
def Print(self , pRoot: TreeNode) -> List[List[int]]:
# write code here
if not pRoot:
return []
queue = [(pRoot, 0)]
levelMap = {}
while queue:
node, level = queue.pop(0)
if node.left:
queue.append((node.left, level+1))
if node.right:
queue.append((node.right, level+1))
if level in levelMap:
levelMap[level].append(node.val)
else:
levelMap[level] = [node.val]
res = []
for key, val in levelMap.items():
if key % 2 == 0:
res.append(val)
else:
res.append(val[::-1])
return res