题目描述:
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
思路:
这道题做法和剑指offer - 把二叉树打印多行- python差不多,不同之处在于不同的层打印顺序不同:
- 偶数层,从左往后打印
- 奇数层,从右往左打印
因此,在保存每层结果时,设置index来判断当前层是偶数层还是奇数层,如果是偶数层直接保存;否则使用反转结果后再保存。
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
if not root: return []
r = []
q = [root]
flag = 0
while q:
t, nextLayer = [], []
for node in q:
t.append(node.val)
if node.left: nextLayer.append(node.left)
if node.right: nextLayer.append(node.right)
if flag % 2 == 0:r.append(t)
else:r.append(t[::-1])
flag += 1
q = nextLayer
return r