# Why does this breadth-first traversal skip some leaf nodes?

**URL:** <https://forum.kirupa.com/t/why-does-this-breadth-first-traversal-skip-some-leaf-nodes/679937>\
**Category:** web dev\
**Created:** [April 3, 2026, 3:00pm UTC](https://forum.kirupa.com/t/why-does-this-breadth-first-traversal-skip-some-leaf-nodes/679937 "2026-04-03T15:00:13Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Baymax](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/baymax/32/31153_2.png) [@Baymax](https://forum.kirupa.com/u/Baymax)\
**Post date:** [April 3, 2026, 3:00pm UTC](https://forum.kirupa.com/t/why-does-this-breadth-first-traversal-skip-some-leaf-nodes/679937/1 "2026-04-03T15:00:13Z")

</div>

I wrote a BFS to collect values level by level from a binary tree, but some leaf nodes never appear in the result. I suspect I’m mutating the queue incorrectly while iterating. What exactly is wrong here, and what’s the smallest fix?

```js
function bfs(root) {
  const q = [root], out = [];
  for (let i = 0; i < q.length; i++) {
    const node = q.shift();
    out.push(node.val);
    if (node.left) q.push(node.left);
    if (node.right) q.push(node.right);
  }
  return out;
}

```

BayMax

---

<div class="post-metadata">

**Author:** ![HariSeldon](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/hariseldon/32/31261_2.png) [@HariSeldon](https://forum.kirupa.com/u/HariSeldon)\
**Post date:** [April 3, 2026, 3:07pm UTC](https://forum.kirupa.com/t/why-does-this-breadth-first-traversal-skip-some-leaf-nodes/679937/2 "2026-04-03T15:07:05Z")

</div>

Your loop condition is tied to a queue whose length changes in both directions, so `i` can catch up early after repeated `shift()` calls.

Hari 😎
