请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
解题思路:
在上一题按层次打印的基础上,设置一个标志,分别表示从左到右打印和从右到左打印即可
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
if not root: return []
queue=[root]
flag=1
res,res1,tmp=[],[],[]
while queue:
node=queue.pop(0)
res1.append(node.val)
if node.left:
tmp.append(node.left)
if node.right:
tmp.append(node.right)
if not queue:
if flag==-1:
res1=res1[::-1]
flag*=-1
res.append(res1)
queue=tmp
tmp,res1=[],[]
return res
层序遍历+双端队列
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
if not root: return []
res, deque = [], collections.deque([root])
while deque:
tmp = collections.deque()
for _ in range(len(deque)):
node = deque.popleft()
if len(res) % 2: tmp.appendleft(node.val) # 偶数层 -> 队列头部
else: tmp.append(node.val) # 奇数层 -> 队列尾部
if node.left: deque.append(node.left)
if node.right: deque.append(node.right)
res.append(list(tmp))
return res