题目描述:
给出一棵二叉树,返回其节点值的锯齿形层次遍历(先从左往右,下一层再从右往左,层与层之间交替进行)
分析:
此题和69. Binary Tree Level Order Traversal很像。只是需要在偶数层的时候,将此level的节点列表倒序。
需要用到python中的deque。71题代码如下:
from collections import deque
class Solution:
def zigzagLevelOrder(self, root):
# write your code here
if root is None:
return []
else:
que = deque([root])
res = []
i = 0
while que:
Node_perlevel = []
i+=1
for _ in range(len(que)):
node = que.popleft()
Node_perlevel.append(node.val)
if node.left:
que.append(node.left)
if node.right:
que.append(node.right)
if i % 2 == 0:
Node_perlevel.reverse()
res.append(Node_perlevel)
else:
res.append(Node_perlevel)
return res
Your submission beats 89.60% Submissions!
可见算法效率还是不错的。
和69题code对比一下:
from collections import deque
class Solution:
def levelOrder(self, root):
if root is None:
return []
else:
queue = deque([root])
res = []
while queue:
Node_perlevel = []
for _ in range(len(queue)):
node = queue.popleft()
Node_perlevel.append(node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
res.append(Node_perlevel)
return res
其实就是多了一个i的判断,i用来存储层数。