【问题标题】:Why first peek and then remove instead of poll为什么先偷看然后删除而不是轮询
【发布时间】:2015-02-04 14:10:44
【问题描述】:

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

  1. 将根节点添加到队列中。
  2. 将队列大小分配给变量,例如计数。重复步骤 3 到 7 次计数,其中 N 是队列的大小。
  3. 如果队列不为空,则打印出队列。
  4. 查看头节点
  5. 如果头部有左孩子,则将其添加到队列中
  6. 如果头部有右孩子,则将其添加到队列中
  7. 从队列中移除头部。
  8. 如果队列不为空,则返回步骤 2。

【问题讨论】:

  • “民意调查”是什么意思?

标签: algorithm queue


【解决方案1】:

有些容器只提供 peek 和 remove 功能,因为使用两者兼而有之的功能,很难或不可能提供强大的异常保证:http://en.wikipedia.org/wiki/Exception_safety

【讨论】:

    【解决方案2】:

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

    poll : 获取并移除此队列的头部,如果此队列为空则返回 null。

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

    【讨论】:

      【解决方案3】:

      您可以窥视一个元素,对其进行测试并可能决定不删除它

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-03-13
          • 2015-09-04
          相关资源
          最近更新 更多