题目:
给你二叉树的根节点
root
,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。来源:力扣(LeetCode)
链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
示例:
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:[[3],[20,9],[15,7]]
示例 2:输入:root = [1]
输出:[[1]]
示例 3:输入:root = []
输出:[]
解法:
BFS,记录层数,奇数层元素反转。
代码:
# 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 = right class Solution: def zigzagLevelOrder(self, root: Optional[TreeNode]) -> List[List[int]]: queue = [(0, root)] d = defaultdict(list) while queue: level, cur = queue.pop(0) if cur: d[level].append(cur.val) queue.append((level + 1, cur.left)) queue.append((level + 1, cur.right)) for k, v in d.items(): if k % 2 == 1: d[k] = v[::-1] return list(d.values())