Tree traversal: Difference between revisions
Content added Content deleted
Not a robot (talk | contribs) (Add SETL) |
|||
Line 10,510: | Line 10,510: | ||
level-order: [1,2,3,4,5,6,7,8,9] |
level-order: [1,2,3,4,5,6,7,8,9] |
||
</pre> |
</pre> |
||
=={{header|SETL}}= |
|||
<syntaxhighlight lang="setl">program tree_traversal; |
|||
tree := [1, [2, [4, [7]], [5]], [3, [6, [8], [9]]]]; |
|||
print("preorder ", preorder(tree)); |
|||
print("inorder ", inorder(tree)); |
|||
print("postorder ", postorder(tree)); |
|||
print("level-order ", levelorder(tree)); |
|||
proc preorder(tree); |
|||
if tree = om then return []; end if; |
|||
[item, left, right] := tree; |
|||
return [item] + preorder(left) + preorder(right); |
|||
end proc; |
|||
proc inorder(tree); |
|||
if tree = om then return []; end if; |
|||
[item, left, right] := tree; |
|||
return inorder(left) + [item] + inorder(right); |
|||
end proc; |
|||
proc postorder(tree); |
|||
if tree = om then return []; end if; |
|||
[item, left, right] := tree; |
|||
return postorder(left) + postorder(right) + [item]; |
|||
end proc; |
|||
proc levelorder(tree); |
|||
items := []; |
|||
loop init queue := [tree]; while queue /= [] do |
|||
[item, left, right] fromb queue; |
|||
items with:= item; |
|||
if left /= om then queue with:= left; end if; |
|||
if right /= om then queue with:= right; end if; |
|||
end loop; |
|||
return items; |
|||
end proc; |
|||
end program;</syntaxhighlight> |
|||
{{out}} |
|||
<pre>preorder [1 2 4 7 5 3 6 8 9] |
|||
inorder [7 4 2 5 1 8 6 9 3] |
|||
postorder [7 4 5 2 8 9 6 3 1] |
|||
level-order [1 2 3 4 5 6 7 8 9]</pre> |
|||
=={{header|Sidef}}== |
=={{header|Sidef}}== |