题目描述
https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal/
思路题解
自己写的方法,层序遍历后按层数逆转
class Solution:
def zigzagLevelOrder(self, root: TreeNode) -> List[List[int]]:
if not root:return []
from collections import deque
ans=[[root.val]]
stack=deque()
stack.append(root)
flag=0#右到左
while stack:
t=stack
a=[]
stack=deque()
while t:
node=t.popleft()
if node.left:
stack.append(node.left)
a.append(node.left.val)
if node.right:
stack.append(node.right)
a.append(node.right.val)
if a:
if flag:ans.append(a)
else:ans.append(a[::-1])
flag^=1
return ans
方法2:按层数头插或者尾插
class Solution:
def zigzagLevelOrder(self, root: TreeNode) -> List[List[int]]:
from collections import deque
if not root:
return []
q1,q2=deque(),deque()
q1.append(root)
flag=1
ans=[]
while q1:
tmp=deque()
while q1:
node=q1.popleft()
if flag==1:
tmp.append(node.val)
else:
tmp.appendleft(node.val)
if node.left:q2.append(node.left)
if node.right:q2.append(node.right)
flag=flag^1
q1=q2.copy()
q2.clear()
ans.append(list(tmp))
return ans