Python deque和popleft(集合模块的一部分)

时间:2015-08-28 00:00:01

标签: python collections binary-tree deque breadth-first-search

这给出了一个列表,其中包含每个root到leaf的路径:

def binaryTreePaths(self, root):
    from collections import deque
    if root is None:
        return []
    queue = deque( [ [root, str(root.val)] ] )
    ans = []
    while queue:
        front, path = queue.popleft()
        if front.left is None and front.right is None:
            ans += path,
            continue
        if front.left:
            queue += [front.left, path + "->" + str(front.left.val)],
        if front.right:
            queue += [front.right, path + "->" + str(front.right.val)],
    return ans

我不明白这是如何工作的,因为我们有一棵1-2-3的树(节点1有左右孩子)。在while循环之后的第一行,当你对它进行搜索时,队列再次是deque([])。由于front是node1而front.left存在(因为node1有一个左子),我们将front.left和一个字符串再次附加到队列。

然后队列是deque([node2,“stringhere”])。然后我们点击第三个if语句:由于node1确实有一个正确的子节点(node3),我们再次添加到队列 ,然后队列变为deque([node2,“stringhere”,node3,“anotherstring”] )。

然后我们返回并点击while循环;由于队列不为空,我们有:

front, path = queue.popleft()

我们的队列是deque([node2,“stringhere”,ndoe3,“anotherstring”])但是由于队列中有4个参数,因此无法调用front,path。

我没有得到什么?

0 个答案:

没有答案