給定一個二叉樹,返回其按層次遍歷的節點值。 (即逐層地,從左到右訪問所有節點)。
例如:
給定二叉樹: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其層次遍歷結果:
[
[3],
[9,20],
[15,7]
]
思路:首先觀察返回值格式爲一個二維數組,第 i 行表示二叉樹的第 i 層,可以使用隊列來協助進行層序遍歷,隊列每一次也傳入一個一維數組[ node, level],其中node表示二叉樹的節點,level表示該節點所處的層數,每遍歷至一個節點就將該節點的左右子節點信息存入隊列中去,再從隊列中取出一組信息,依次循環。
注意result的行數要隨着level的增加而增加,每向下遍歷一層,result行數+1
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def levelOrder(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
import queue
result = [[]]
q = queue.Queue()
if root == None:
return []
q.put([root, 0]) # 第一個數據爲節點,第二個數據爲層數
while not q.empty():
temp = q.get()
node = temp[0] # 節點
level = temp[1] # 層數
if level == len(result):
result.append([])
result[level].append(node.val)
if node.left:
q.put([node.left, level + 1])
if node.right:
q.put([node.right, level + 1])
return result