Tree traversal: Difference between revisions
Content added Content deleted
(Added XPL0 example.) |
Not a robot (talk | contribs) (Add Miranda) |
||
Line 7,444: | Line 7,444: | ||
postorder: 7 4 5 2 8 9 6 3 1 |
postorder: 7 4 5 2 8 9 6 3 1 |
||
levelorder: 1 2 3 4 5 6 7 8 9 </pre> |
levelorder: 1 2 3 4 5 6 7 8 9 </pre> |
||
=={{header|Miranda}}== |
|||
<syntaxhighlight lang="miranda">main :: [sys_message] |
|||
main = [Stdout (lay [show (f example) |
|||
| f <- [preorder,inorder,postorder,levelorder]])] |
|||
example :: tree num |
|||
example = Node 1 (Node 2 (Node 4 (leaf 7) Nilt) |
|||
(leaf 5)) |
|||
(Node 3 (Node 6 (leaf 8) (leaf 9)) Nilt) |
|||
tree * ::= Nilt | Node * (tree *) (tree *) |
|||
leaf :: *->tree * |
|||
leaf k = Node k Nilt Nilt |
|||
preorder :: tree *->[*] |
|||
preorder Nilt = [] |
|||
preorder (Node v l r) = v : preorder l ++ preorder r |
|||
inorder :: tree *->[*] |
|||
inorder Nilt = [] |
|||
inorder (Node v l r) = inorder l ++ v : inorder r |
|||
postorder :: tree *->[*] |
|||
postorder Nilt = [] |
|||
postorder (Node v l r) = postorder l ++ postorder r ++ [v] |
|||
levelorder :: tree *->[*] |
|||
levelorder t = f [t] |
|||
where f [] = [] |
|||
f (Nilt:xs) = f xs |
|||
f (Node v l r:xs) = v : f (xs++[l,r])</syntaxhighlight> |
|||
{{out}} |
|||
<pre>[1,2,4,7,5,3,6,8,9] |
|||
[7,4,2,5,1,8,6,9,3] |
|||
[7,4,5,2,8,9,6,3,1] |
|||
[1,2,3,4,5,6,7,8,9]</pre> |
|||
=={{header|Nim}}== |
=={{header|Nim}}== |