queue = [1,2,3]
for i in range(len(queue)):#
print(queue[i])
queue.append(4)
print(queue)
output:
1 2 3 [1, 2, 3, 4, 4, 4]
在这个for loop 中,range中len(queue): memory只会看原始的queue,查出len,不会在后续iteration queue发生变化时更改储存在memory中的len(queue)
除非for loop 外面还有while loop,在while loop中queue发生改变,再次来到 for i in range(len(queue))时才会发生改变。如下:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
if root is None:
return []
queue = [root]# only contains the node from 1 level
res = []
while queue:
#extract len(queue) elements out
level = []
# traverse only 1 level
for elem in range(len(queue)):
cur = queue.pop(0)
level.append(cur.val)
if cur.left:
queue.append(cur.left)
if cur.right:
queue.append(cur.right)
res.append(level)
return res