1. 程式人生 > >LeetCode:102. 二叉樹的層次遍歷(Python 3)

LeetCode:102. 二叉樹的層次遍歷(Python 3)

題目:

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

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

    3
   / \
  9  20
    /  \
   15   7

返回其層次遍歷結果:

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

解答:

這個要用佇列來實現。

1. 把根節點入佇列

2. 在一個迴圈中,先取出根節點(出佇列 + 訪問節點)

3. 把根節點的左右孩子入佇列

然而這裡不但要層次遍歷,而且要按層輸出,於是再增加一個list作為每一層的節點,正好佇列的長度就是每一層的元素個數。

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

class Solution:
    def levelOrder(self, root):
        """
        :type root: TreeNode
        :rtype: List[List[int]]
        """
        nodeQuene = []
        result = []
        if not root:
            return result
        nodeQuene.append(root)
        while nodeQuene:
            # 這個表示單層節點所有的值
            singleLevel = []            
            queneLength = len(nodeQuene)
            for i in range(0, queneLength):
                currentNode = nodeQuene.pop(0)
                if currentNode.left:
                    nodeQuene.append(currentNode.left)
                if currentNode.right:
                    nodeQuene.append(currentNode.right)
                singleLevel.append(currentNode.val)
            result.append(singleLevel)
        return result