69 lines
1.0 KiB
Plaintext
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
|