35 lines
898 B
Groovy
35 lines
898 B
Groovy
def preorder;
|
|
preorder = { Node node ->
|
|
([node] + node.children().collect { preorder(it) }).flatten()
|
|
}
|
|
|
|
def postorder;
|
|
postorder = { Node node ->
|
|
(node.children().collect { postorder(it) } + [node]).flatten()
|
|
}
|
|
|
|
def inorder;
|
|
inorder = { Node node ->
|
|
def kids = node.children()
|
|
if (kids.empty) [node]
|
|
else if (kids.size() == 1 && kids[0].'@right') [node] + inorder(kids[0])
|
|
else inorder(kids[0]) + [node] + (kids.size()>1 ? inorder(kids[1]) : [])
|
|
}
|
|
|
|
def levelorder = { Node node ->
|
|
def nodeList = []
|
|
def level = [node]
|
|
while (!level.empty) {
|
|
nodeList += level
|
|
def nextLevel = level.collect { it.children() }.flatten()
|
|
level = nextLevel
|
|
}
|
|
nodeList
|
|
}
|
|
|
|
class BinaryNodeBuilder extends NodeBuilder {
|
|
protected Object postNodeCompletion(Object parent, Object node) {
|
|
assert node.children().size() < 3
|
|
node
|
|
}
|
|
}
|