题目
请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
解题思路
每一层的节点都等于当前队列que
中的节点,在将当前层节点全部弹出之后再处理下一层。
在标准层次遍历的基础上加上了按层输出的操作以及判断level
的操作,path
使用队列表示,奇数层用append
将节点值添加到尾部,偶数层则用appendleft
将节点添加到头部。
代码
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
from collections import deque
def levelOrder(self, root: TreeNode) -> List[List[int]]:
#层次遍历:path使用队列,奇数append,偶数appendleft
if not root: return []
que = deque([root])
res = []
level = 0
while que:
level_size = len(que)
path = deque()
level += 1
for _ in range(level_size):
cur = que.popleft()
if level & 1:
path.append(cur.val)
else:
path.appendleft(cur.val)
if cur.left: que.append(cur.left)
if cur.right: que.append(cur.right)
res.append(list(path)[:])
return res