劍指offer【32】:層序遍歷打印二叉樹

題目:

 

思路+代碼:

import queue

class Solution:
    def levelOrder(self, root: TreeNode) -> List[int]:
        # 思路:使用棧保存每層從左至右的左節點和右節點,一個list保存層序遍歷節點的值;

        # 用list實現
        if not root:return []
        res, node_list = [],[]
        node_list.append(root)
        while node_list:
            node = node_list.pop(0)
            res.append(node.val)
            if node.left: node_list.append(node.left)
            if node.right: node_list.append(node.right)
        return res

        # 用隊列實現
        if not root:return []
        q = queue.Queue()  
        q.put(root)
        res = []
        while q.qsize() > 0:  # 不能寫while q, q始終是一個對象,會時間超時
            node = q.get()
            res.append(node.val)
            if node.left:q.put(node.left)
            if node.right: q.put(node.right) 
        return res

        # 雙端隊列實現
        if not root: return []
        res, queue = [], collections.deque()
        queue.append(root)
        while queue:
            node = queue.popleft()
            res.append(node.val)
            if node.left: queue.append(node.left)
            if node.right: queue.append(node.right)
        return res

 

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