103. 二叉树的锯齿形层序遍历
给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
解题思路:模仿层序遍历的方法,需要加一个层数指示器,当层数为偶数,则反转列表。
class Solution:
def zigzagLevelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
if not root:
return []
# 结果
res = []
# 队列,存储下一层的节点
queue = [root]
# 指示方向,统计层数
count = 1
while queue:
cur_l = [] # 当前层的节点结果
cur_l_size = len(queue)
# 遍历当前层节点
for _ in range(cur_l_size):
node = queue.pop(0)
cur_l.append(node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
# 如果是偶数层,则反转
if count % 2 == 0:
cur_l = cur_l[::-1]
res.append(cur_l)
count+=1
return res