leetcode-107 二叉樹的層次遍歷

給定一個二叉樹,返回其節點值自底向上的層次遍歷。 (即按從葉子節點所在層到根節點所在的層,逐層從左向右遍歷)


思路:容易想到對樹的層次遍歷是通過隊列完成的,不過發現python的queue模塊並沒有提供循環隊列,只提供了簡單的隊列,好處是不會限制隊列的大小,難點在於怎麼分層次的把節點值存到內層隊列中,方法是:先用size獲取隊列的大小即爲該層次上的節點個數,然後一次訪問隊列的前size個節點,每次訪問完一層都要將獲取到的隊列的值,返回到結果中

下面是python代碼:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

from queue import Queue

class Solution:
    
    def levelOrderBottom(self, root):
        """
        :type root: TreeNode
        :rtype: List[List[int]]
        """
        result = []
        
        #空樹,直接返回
        if root == None:
            return result
        
        #非空使用隊列解決問題,採用二叉樹的層次遍歷
        q = Queue()
        q.put(root)
        
        #使用二層循環輸出隊列
        while not q.empty():
            
            size = q.qsize()
            temp_list = []
            
            #使用size獲取每層的隊列的大小
            #內層循環獲取頭節點,並且處理數據,然後將其子節點入隊
            while size > 0:
                temp_node = q.get()
                temp_list.append(temp_node.val)
                
                if temp_node.left != None:
                    q.put(temp_node.left)
                if temp_node.right != None:
                    q.put(temp_node.right)
                size -= 1
                
            result.append(temp_list)
            
        result.reverse()
        
        return result

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