Tree traversal: Difference between revisions

Content added Content deleted
No edit summary
m (→‎{{header|REBOL}}: added visit func)
Line 8,981: Line 8,981:
=={{header|REBOL}}==
=={{header|REBOL}}==
<lang REBOL>
<lang REBOL>

tree: [1 [2 [4 [7 [] []] []] [5 [] []]] [3 [6 [8 [] []] [9 [] []]] []]]
tree: [1 [2 [4 [7 [] []] []] [5 [] []]] [3 [6 [8 [] []] [9 [] []]] []]]
; "compacted" version
; "compacted" version
tree: [1 [2 [4 [7 ] ] [5 ]] [3 [6 [8 ] [9 ]] ]]
tree: [1 [2 [4 [7 ] ] [5 ]] [3 [6 [8 ] [9 ]] ]]

visit: func [tree [block!]][prin rejoin [first tree " "]]


preorder: func [tree [block!]][
preorder: func [tree [block!]][
if not empty? tree [prin rejoin [first tree " "]]
if not empty? tree [visit tree]
attempt [preorder second tree]
attempt [preorder second tree]
attempt [preorder third tree]
attempt [preorder third tree]
Line 8,996: Line 8,997:
inorder: func [tree [block!]][
inorder: func [tree [block!]][
attempt [inorder second tree]
attempt [inorder second tree]
if not empty? tree [prin rejoin [first tree " "]]
if not empty? tree [visit tree]
attempt [inorder third tree]
attempt [inorder third tree]
]
]
Line 9,005: Line 9,006:
attempt [postorder second tree]
attempt [postorder second tree]
attempt [postorder third tree]
attempt [postorder third tree]
if not empty? tree [prin rejoin [first tree " "]]
if not empty? tree [visit tree]
]
]
prin "postorder: " postorder tree
prin "postorder: " postorder tree
Line 9,018: Line 9,019:
while [not empty? queue] [
while [not empty? queue] [
tree: dequeue queue
tree: dequeue queue
if not empty? tree [prin rejoin [first tree " "]]
if not empty? tree [visit tree]
attempt [enqueue second tree]
attempt [enqueue second tree]
attempt [enqueue third tree]
attempt [enqueue third tree]