https://leetcode.com/problems/binary-tree-zigzag-level-order-traversal/description/
还是层序遍历,不同的是要求每层的遍历方向不同
思路:还是层序,设一个变量direct,初始为0,每层反转一次,根据direct决定是否将该层数据倒序
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
import queue
class Solution:
def zigzagLevelOrder(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
if not root:
return []
res = []
direct = 0 #方向变量,0表示从左向右,1表示从右向左
q = queue.Queue()
q.put(root)
while q.qsize() > 0: #从左向右,层序遍历
n = q.qsize()
data = []
for i in range(n):
node = q.get()
data.append(node.val)
if node.left:
q.put(node.left)
if node.right:
q.put(node.right)
if direct == 1: #若方向变量为1,即从右向左,将data逆序
data = data[::-1]
direct = 1 - direct #翻转
res.append(data)
return res