46 lines
1.1 KiB
Text
46 lines
1.1 KiB
Text
tree: [1 [2 [4 [7 [] []] []] [5 [] []]] [3 [6 [8 [] []] [9 [] []]] []]]
|
|
; "compacted" version
|
|
tree: [1 [2 [4 [7 ] ] [5 ]] [3 [6 [8 ] [9 ]] ]]
|
|
|
|
visit: func [tree [block!]][prin rejoin [first tree " "]]
|
|
left: :second
|
|
right: :third
|
|
|
|
preorder: func [tree [block!]][
|
|
if not empty? tree [visit tree]
|
|
attempt [preorder left tree]
|
|
attempt [preorder right tree]
|
|
]
|
|
prin "preorder: " preorder tree
|
|
print ""
|
|
|
|
inorder: func [tree [block!]][
|
|
attempt [inorder left tree]
|
|
if not empty? tree [visit tree]
|
|
attempt [inorder right tree]
|
|
]
|
|
prin "inorder: " inorder tree
|
|
print ""
|
|
|
|
postorder: func [tree [block!]][
|
|
attempt [postorder left tree]
|
|
attempt [postorder right tree]
|
|
if not empty? tree [visit tree]
|
|
]
|
|
prin "postorder: " postorder tree
|
|
print ""
|
|
|
|
queue: []
|
|
enqueue: func [tree [block!]][append/only queue tree]
|
|
dequeue: func [queue [block!]][take queue]
|
|
level-order: func [tree [block!]][
|
|
clear head queue
|
|
queue: enqueue tree
|
|
while [not empty? queue] [
|
|
tree: dequeue queue
|
|
if not empty? tree [visit tree]
|
|
attempt [enqueue left tree]
|
|
attempt [enqueue right tree]
|
|
]
|
|
]
|
|
prin "level-order: " level-order tree
|