題目描述:
給出一棵二叉樹,返回其節點值的鋸齒形層次遍歷(先從左往右,下一層再從右往左,層與層之間交替進行)
分析:
此題和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用來存儲層數。