1. 程式人生 > >【Leetcode_總結】102. 二叉樹的層次遍歷 - python

【Leetcode_總結】102. 二叉樹的層次遍歷 - python

Q:

給定一個二叉樹,返回其按層次遍歷的節點值。 (即逐層地,從左到右訪問所有節點)。

例如:
給定二叉樹: [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

返回其層次遍歷結果:

[
  [3],
  [9,20],
  [15,7]
]

連結:https://leetcode-cn.com/problems/binary-tree-level-order-traversal/description/

思路:利用佇列,由於輸出的關係,因此還需要統計一下層數

程式碼:

class Solution:
    def levelOrder(self, root):
        """
        :type root: TreeNode
        :rtype: List[List[int]]
        """
        res = []
        if root == None:
            return []
        """利用佇列實現樹的層次遍歷"""
        from queue import Queue
        q = Queue()
        q.put((root,0))
        while not q.empty():
            node ,level = q.get()
            if level == len(res):
                res.append([])
            res[level].append(node.val)
            flag = 0
            if node.left != None:
                flag += 1
                q.put((node.left,level+1))
            if node.right != None:
                flag += 1
                q.put((node.right, level + 1))
        return res

另一種解法:也是利用佇列的思想,只是統計層數的過程不同

class Solution:
    def levelOrder(self, root):
        """
        :type root: TreeNode
        :rtype: List[List[int]]
        """
        res = []
        que = [root]
        if root == None:
            return res
        while que:
            tempList = []
            for i in range(len(que)):
                node = que.pop(0)
                tempList.append(node.val)
                if node.left:
                    que.append(node.left)
                if node.right:
                    que.append(node.right)
            res.append(tempList)
        return res