Skip to content

Commit 2b3c2b2

Browse files
committed
Commit WalkLevelOrder() method for performing BFS-like walking
1 parent 93867e5 commit 2b3c2b2

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

binarytree.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,37 @@ func (n *Node[T]) WalkPostOrder(walkFunc WalkFunc[T]) error {
200200
return nil
201201
}
202202

203+
// WalkLevelOrder performs an iterative Level-order (Breadth-first)
204+
// walking of the binary tree.
205+
func (n *Node[T]) WalkLevelOrder(walkFunc WalkFunc[T]) error {
206+
queue := deque.New[*Node[T]]()
207+
queue.PushBack(n)
208+
209+
for !queue.IsEmpty() {
210+
node, err := queue.PopFront()
211+
if err != nil {
212+
panic(err)
213+
}
214+
215+
if n.shouldSkipNode(node) {
216+
continue
217+
}
218+
219+
if err := walkFunc(node); err != nil {
220+
return err
221+
}
222+
223+
if node.Left != nil {
224+
queue.PushBack(node.Left)
225+
}
226+
if node.Right != nil {
227+
queue.PushBack(node.Right)
228+
}
229+
}
230+
231+
return nil
232+
}
233+
203234
// Size returns the size of the tree
204235
func (n *Node[T]) Size() int {
205236
size := 0

0 commit comments

Comments
 (0)