Breath First Traversal 的程式碼
1 | // ... |
這邊說明 breathFirstTraversal 的程式碼裡面的作用為何
1 | const queue = [this]; |
1 | while(queue.length) { // 這一行是代表當 queue 內沒有元素之後,就不再執行這個迴圈 |
具象化程式碼的執行過程
用圖形具象化上面 while 迴圈裡的程式碼執行過程
step 1.
將 node 50 塞入 queue 中,就是 queue = [this]
的這個 this
指向的 node。
step 2.
將 node 50 從 queue 取出來,並傳入 iteratorFnc 並將 node 50 的 left-side node 和 right-side node 塞入 queue 裡,所以,node 30 和 node 70 被塞入 queue。
step 3.
將 node 30 從 queue 取出來,並傳入 iteratorFnc 並將 node 30 的 left-side node 和 right-side node 塞入 queue 裡,所以, node 40 被塞入 queue。
step 4
將 node 70 從 queue 取出來,並傳入 iteratorFnc 並將 node 70 的 left-side node 和 right-side node 塞入 queue 裡,所以, node 100 被塞入 queue。
step 5
將 node 40 從 queue 取出來,並傳入 iteratorFnc 並將 node 40 的 left-side node 和 right-side node 塞入 queue 裡,所以, 沒有任何 node 被塞入 queue。
step 6
將 node 100 從 queue 取出來,並傳入 iteratorFnc 並將 node 100 的 left-side node 和 right-side node 塞入 queue 裡,所以, 沒有任何 node 被塞入 queue。
step 7 結束,整個 tree 的 node 都被遍歷過了。
Conclusion
- 知道如何撰寫 breathFirstTraversal 程式碼。
- breathFirstTraversal 是以水平方向的方式遍歷,不是像 depthFirstTraversal 先從最末端的 node 來執行。
Reference Link
- Learning Data Structures in JavaScript from Scratch by Eric Traub @ Udemy