题目描述
给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
例如:给定二叉树 [3,9,20,null,null,15,7],
返回锯齿形层次遍历如下:[ [3], [20,9], [15,7]]
算法思路
类似二叉树的层次遍历。
class Solution:
def zigzagLevelOrder(self, root: TreeNode) -> List[List[int]]:
if not root:return []
q = [root]
result = []
k=-1
while q:
res,d= [],[]
k+=1
while q:
i=q.pop()
res.append(i.val)
if not k%2:
if i.left:d.append(i.left)
if i.right:d.append(i.right)
else:
if i.right:d.append(i.right)
if i.left:d.append(i.left)
result.append(res)
q=d[:]
return result
或者仅在结果位置result.append(res)
修改。
class Solution:
def zigzagLevelOrder(self, root: TreeNode) -> List[List[int]]:
if not root:return []
q = [root]
result = []
k=0
while q:
res= []
k+=1
for i in range(len(q)):
i=q.pop(0)
res.append(i.val)
if i.left:q.append(i.left)
if i.right:q.append(i.right)
if not k%2:res.reverse()
result.append(res)
return result