为什么先查看然后删除而不是轮询

Why first peek and then remove instead of poll

在多个实例中,我遇到了先查看然后删除第一个队列头的算法。我想知道是否有任何特殊原因不使用 poll 代替。例如下面的二叉树层序遍历算法HERE

  1. 将根节点添加到队列中。
  2. 将队列大小分配给一个变量,比如计数。重复步骤 3 到 7 count 次,其中 N 是队列的大小。
  3. 如果队列不为空,打印队列。
  4. 查看头节点
  5. 如果头部已经离开child,将其加入队列
  6. 如果头部有权利child,将其加入队列
  7. 从队列中移除头部。
  8. 如果队列不为空,返回步骤2。

您可以查看一个元素,测试它并可能决定不删除它

Peek 检索队列后面的元素(最后一个元素)而不删除它,因此 PEEKing 是查看该元素以确认它是否是您要修改的元素的好方法。 您已经知道 pop 会在不提供元素引用的情况下删除元素以对其进行检查。所以这实际上取决于你真正想做什么。

一些容器只提供 peek 和 remove,因为如果有一个函数同时执行这两个功能,则很难或不可能提供强异常保证:http://en.wikipedia.org/wiki/Exception_safety

peek :检索但不删除此队列的头部,如果此队列为空,则 returns 为 null。

poll : 检索并移除此队列的头部,或者 returns null 如果此队列为空。

删除: 检索并删除此队列的头部。