力扣 103. 二叉樹的鋸齒形層次遍歷

給定一個二叉樹,返回其節點值的鋸齒形層次遍歷。(即先從左往右,再從右往左進行下一層遍歷,以此類推,層與層之間交替進行)。

來源力扣

思路:逐層遍歷,所以優先選擇BFS(寬度優先)
如果正常順序(統一從左到右)的話,可以先看這個二叉樹的層序遍歷

鋸齒遍歷的話,解題思路如下:
1.我們不改變進隊列的順序,下層一直按從左到右進隊。
2.但我們會將 隊列值的訪問,進隊出隊 這兩步分開操作
3.即先將本層根據層數從左到右或從右到左訪問。之後將本層節點出隊,下層依然按照固定順序入隊

數據分析:
queue:它裏面永遠存且僅存 一層節點

class Solution:
    def zigzagLevelOrder(self, root: TreeNode) -> List[List[int]]:
        queue=collections.deque()
        queue.append(root)
        if not root:
            return []
        n=0
        lt=[]
        
        while queue:
            size=len(queue)
            n=(n+1)%2
            l=[]
            #根據n值,改變訪問方向
            if n:
                for i in range(size):
                    l.append(queue[i].val)
            else:
                for i in range(-1,-size-1,-1):
                    l.append(queue[i].val)                
			#存入總列表
            if l:
                lt.append(l)
            #本層出隊,下層按統一方向(從左到右)進隊   
            for i in range(size):
                cur=queue.popleft()
                if cur.left:
                    queue.append(cur.left)                   
                if cur.right:
                    queue.append(cur.right)

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