面试150 二叉树的锯齿层次遍历
思路
通过层序遍历,队列去实现。只需要加多一个变量去控制是否要逆转即可。
from collections import deque
from typing import Optional, List# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = rightclass Solution:def zigzagLevelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:res = []if not root:return resque = deque([root])left_to_right = True # 控制层序遍历方向while que:level = []for _ in range(len(que)):node = que.popleft()level.append(node.val)if node.left:que.append(node.left)if node.right:que.append(node.right)# 根据当前方向决定是否反转if not left_to_right:level.reverse()res.append(level)left_to_right = not left_to_right # 切换方向return res