给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
例如:
给定二叉树 [3,9,20,null,null,15,7]
,
3
/
9 20
/
15 7
返回锯齿形层次遍历如下:
[
[3],
[20,9],
[15,7]
]
#
# @lc app=leetcode.cn id=103 lang=python3
#
# [103] 二叉树的锯齿形层次遍历
#
# @lc code=start
# 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]]:
import queue
q = queue.Queue()
ans = []
if root:
q.put((0,root))
while(not q.empty()):
level, node = q.get()
lnode, rnode = node.left, node.right
if len(ans)<=level:
ans.append([])
ans[level].append(node.val)
if lnode:
q.put((level+1,lnode))
if rnode:
q.put((level+1,rnode))
for i in range(1,len(ans),2):
ans[i] = ans[i][::-1]
return ans
# @lc code=end