Leetcode 每日一题
题目链接: 103. 二叉树的锯齿形层序遍历
难度: 中等
解题思路: 用BFS来处理,每次处理整个队列中的值(每一层)。这道题和222. 完全二叉树的节点个数(二叉树层次遍历) 类似,都是进行层次遍历,只不过这个要考虑某个节点处于的层。
题解:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def zigzagLevelOrder(self, root: TreeNode) -> List[List[int]]:
if root == None:
return []
res = []
queue = []
queue.append(root)
# 反向标志
is_reverse = 0
# bfs
while queue:
res.append([])
length = len(queue)
for itera in range(length):
# 给对应的层加入结点
res[-1].append(queue[itera].val)
if queue[itera].left:
queue.append(queue[itera].left)
if queue[itera].right:
queue.append(queue[itera].right)
for itera in range(length):
queue.pop(0)
# 反向
if is_reverse:
res[-1].reverse()
is_reverse = ~is_reverse
return res