File tree Expand file tree Collapse file tree 2 files changed +19
-0
lines changed Expand file tree Collapse file tree 2 files changed +19
-0
lines changed Original file line number Diff line number Diff line change @@ -116,6 +116,22 @@ type tree struct {
116116 dummy node
117117}
118118
119+ func (t * tree ) Traverse (fn func (id Interval )) {
120+ nodes := []* node {t .root }
121+
122+ for len (nodes ) != 0 {
123+ c := nodes [len (nodes )- 1 ]
124+ fn (c .interval )
125+ nodes = nodes [:len (nodes )- 1 ]
126+ if c .children [0 ] != nil {
127+ nodes = append (nodes , c .children [0 ])
128+ }
129+ if c .children [1 ] != nil {
130+ nodes = append (nodes , c .children [1 ])
131+ }
132+ }
133+ }
134+
119135func (tree * tree ) resetDummy () {
120136 tree .dummy .children [0 ], tree .dummy .children [1 ] = nil , nil
121137 tree .dummy .red = false
Original file line number Diff line number Diff line change @@ -69,4 +69,7 @@ type Tree interface {
6969 // interval. The provided interval's ID method is ignored so the
7070 // provided ID is irrelevant.
7171 Query (interval Interval ) Intervals
72+ // Traverse will traverse tree and give alls intervals
73+ // found in an undefined order
74+ Traverse (func (Interval ))
7275}
You can’t perform that action at this time.
0 commit comments