Skip to content

Commit fcaff5a

Browse files
committed
augmentedtree: add traverse func
1 parent 6f39ffc commit fcaff5a

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

augmentedtree/atree.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff 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+
119135
func (tree *tree) resetDummy() {
120136
tree.dummy.children[0], tree.dummy.children[1] = nil, nil
121137
tree.dummy.red = false

augmentedtree/interface.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff 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
}

0 commit comments

Comments
 (0)