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 [ |
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 [ |
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 [ |
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 [ |
if not empty? tree [visit tree] |
||
attempt [enqueue second tree] |
attempt [enqueue second tree] |
||
attempt [enqueue third tree] |
attempt [enqueue third tree] |