1. 程式人生 > 其它 >leetcode-107 二叉樹的層次遍歷

leetcode-107 二叉樹的層次遍歷

leetcode-107 二叉樹的層次遍歷

1. 二叉樹的層次遍歷,即通過使用佇列的方法(可用陣列代替),每次儲存某一層的所有節點,然後在一個for迴圈中遍歷該節點,將所有節點的子節點入隊,並記錄下所有節點的值,將他們堆入棧中。

2. example

  • 根節點入隊 cur=[3],res=[[3]]
  • 遍歷cur,通過中間變數next儲存第二層所有節點,再將所有節點值堆入棧中,用next中元素覆蓋cur,next=[9,20],cur=[9,20],res=[[3],[9,20]]
  • 遍歷cur,通過中間變數next儲存第三層所有節點,再將所有節點值堆入棧中,用next中元素覆蓋cur,next=[15,7],cur=[15,7],res=[[3],[9,20],[15,7]]
  • 遍歷cur,通過中間變數next儲存第四層所有節點,再將所有節點值堆入棧中,用next中元素覆蓋cur,next=[],cur=[],res=[[3],[9,20],[15,7]]

3. code

class Solution:
    def levelOrderBottom(self, root: TreeNode) -> List[List[int]]:
        if not root:
            return []
        cur=[root]
        stack=[[root.val]]
        while cur:
            next=[]
            val=[]
            for i in cur:
                if i.left:
                    next.append(i.left)
                if i.right:
                    next.append(i.right)
            cur=next
            for j in next:
                val.append(j.val)
            if val:
                stack.append(val)
        return stack[::-1]