RosettaCodeData/Task/Tree-traversal/Adina/tree-traversal-2.adina

69 lines
1.0 KiB
Plaintext

english()
struct node
data left right
leaf x =
node x #f #f
the-tree =
node 1
node 2
node 4
leaf 7
#f
leaf 5
node 3
node 6
leaf 8
leaf 9
#f
preorder tree visit =
let loop
$ t tree
when t
visit node-data(t)
loop node-left(t)
loop node-right(t)
inorder tree visit =
let loop
$ t tree
when t
loop node-left(t)
visit node-data(t)
loop node-right(t)
postorder tree visit =
let loop
$ t tree
when t
loop node-left(t)
loop node-right(t)
visit node-data(t)
levelorder tree visit =
let loop
$ trees
list tree
unless null?(trees)
loop
append*
for/list
(t trees) #:when t
visit node-data(t)
list node-left(t) node-right(t)
run name order =
printf "~a" name
order the-tree
lambda (x)
printf " ~s" x
newline()
run "preorder: " preorder
run "inorder: " inorder
run "postorder: " postorder
run "level-order: " levelorder