解
分析
接着上一题的思路
- 我们用队列q遍历树的节点 顺序永远是 从左往右 从上往下
- 定义一个 l2r 记录当前层我们应该 从左往右 还是 从右往左
- 当 从左往右 时,order添加当前node的val到队尾
- 当 从右往左 时,order添加当前node的val到队首
# 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]]:
result = list()
if not root:
return []
# 队列
q = list()
q.append(root)
# 定义 从左往右 还是 从右往左 的bool值
l2r = 1
while q:
# 该层节点val列表
order = list()
# 该层节点个数
n = len(q)
if l2r:
for i in range(n):
node = q.pop(0)
# 添加到队尾
order.append(node.val)
if node.left:
q.append(node.left)
if node.right:
q.append(node.right)
else:
for i in range(n):
node = q.pop(0)
# 添加到队首
order.insert(0, node.val)
if node.left:
q.append(node.left)
if node.right:
q.append(node.right)
result.append(order[:])
# 更改 l2r
l2r = l2r ^ 1
return result