我正在做一些简单的算法问题并玩弄 ArrayDeque。
比如这个:
https://leetcode.com/problems/maximum-depth-of-binary-tree/submissions/
使用 BFS 时,我注意到 offerLast 和 pollFirst / offerFirst 和 pollLast 都给出了相同(正确)的答案。
何时使用哪个有最佳实践吗?由于这应该是一个队列,我认为我们应该提供最后并使用 pollFirst。但是为什么 offerFirst / pollLast 也有效?
public int maxDepth(TreeNode root) {
// do BFS
if (root == null) return 0;
int depth = 0;
ArrayDeque<TreeNode> queue = new ArrayDeque();
queue.offerLast(root);
while(!queue.isEmpty()){
int size = queue.size();
for (int i = 0; i < size; i++){
TreeNode curr = queue.pollFirst();
if (curr.left != null) queue.offerLast(curr.left);
if (curr.right != null) queue.offerLast(curr.right);
}
depth++;
}
return depth;
}
另外,我知道我们不需要队列为 ArrayDeque 类型。只需一个简单的队列即可工作,而队列仅提供默认为 FIFO 实现的报价/轮询(offerLast,pollFirst)