File tree Expand file tree Collapse file tree 1 file changed +31
-0
lines changed Expand file tree Collapse file tree 1 file changed +31
-0
lines changed Original file line number Diff line number Diff 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
204235func (n * Node [T ]) Size () int {
205236 size := 0
You can’t perform that action at this time.
0 commit comments