Tree traversal: Difference between revisions
Content added Content deleted
imported>Arakov |
(Added Easylang) |
||
Line 4,156: | Line 4,156: | ||
levelOrder(btree, fn v { print(" ", v) }) |
levelOrder(btree, fn v { print(" ", v) }) |
||
println()</syntaxhighlight> |
println()</syntaxhighlight> |
||
=={{header|EasyLang}}== |
|||
{{trans|C}} |
|||
<syntaxhighlight lang=easylang> |
|||
tree[] = [ 1 2 3 4 5 6 -1 7 -1 -1 -1 8 9 ] |
|||
# |
|||
proc preorder ind . . |
|||
if ind > len tree[] or tree[ind] = -1 |
|||
return |
|||
. |
|||
write " " & tree[ind] |
|||
preorder ind * 2 |
|||
preorder ind * 2 + 1 |
|||
. |
|||
write "preorder:" |
|||
preorder 1 |
|||
print "" |
|||
# |
|||
proc inorder ind . . |
|||
if ind > len tree[] or tree[ind] = -1 |
|||
return |
|||
. |
|||
inorder ind * 2 |
|||
write " " & tree[ind] |
|||
inorder ind * 2 + 1 |
|||
. |
|||
write "inorder:" |
|||
inorder 1 |
|||
print "" |
|||
# |
|||
proc postorder ind . . |
|||
if ind > len tree[] or tree[ind] = -1 |
|||
return |
|||
. |
|||
postorder ind * 2 |
|||
postorder ind * 2 + 1 |
|||
write " " & tree[ind] |
|||
. |
|||
write "postorder:" |
|||
postorder 1 |
|||
print "" |
|||
# |
|||
global tail head queue[] . |
|||
proc initqu n . . |
|||
len queue[] n |
|||
tail = 1 |
|||
head = 1 |
|||
. |
|||
proc enqu v . . |
|||
queue[tail] = v |
|||
tail = (tail + 1) mod1 len queue[] |
|||
. |
|||
func dequ . |
|||
if head = tail |
|||
return -1 |
|||
. |
|||
h = head |
|||
head = (head + 1) mod1 len queue[] |
|||
return queue[h] |
|||
. |
|||
initqu len tree[] |
|||
proc levelorder n . . |
|||
enqu n |
|||
repeat |
|||
ind = dequ |
|||
until ind = -1 |
|||
if ind < len tree[] and tree[ind] <> -1 |
|||
write " " & tree[ind] |
|||
enqu ind * 2 |
|||
enqu ind * 2 + 1 |
|||
. |
|||
. |
|||
. |
|||
write "level-order:" |
|||
levelorder 1 |
|||
print "" |
|||
</syntaxhighlight> |
|||
=={{header|Eiffel}}== |
=={{header|Eiffel}}== |