LintCode 71. Binary Tree Zigzag Level Order Traversal

題目描述:

給出一棵二叉樹,返回其節點值的鋸齒形層次遍歷(先從左往右,下一層再從右往左,層與層之間交替進行)

分析:

此題和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用來存儲層數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章