要点:
!!!!!!使用collections中的deque双端队列其中每次.popleft()弹出一个元素的时间复杂度是O(1),而使用pop()的时间复杂度是O(n)[.pop()循环每一个元素来寻找]!!!!!!
(1)在队列不为空的时候,最重要的是queue队列中要记录下每一层的节点,接着对queue的长度进行遍历输出。同时在输出每一个元素的时候要将此节点的不为空的左右节点append进队列中。
(2)使用临时列表存储每一层的数值,每一层遍历结束之后,将每一层的元素作为一个列表,将其全部存储进res中。
from collections import deque
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def levelOrder(self, root: TreeNode):
if not root:
return []
res, queue = [], deque()
queue.append(root)
while queue:
tmp = []
for _ in range(len(queue)):
node = queue.popleft()
tmp.append(node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
res.append(tmp)
return res
node = TreeNode(3)
node.left = TreeNode(9)
node.right = TreeNode(20)
a = Solution()
b = a.levelOrder(node)
print(b)