Tree traversal: Difference between revisions

m
(3 intermediate revisions by 3 users not shown)
Line 44:
.right = right
 
F preorder(visitor) -> NVoid
visitor(.data)
I .left != N
Line 51:
.right.preorder(visitor)
 
F inorder(visitor) -> NVoid
I .left != N
.left.inorder(visitor)
Line 58:
.right.inorder(visitor)
 
F postorder(visitor) -> NVoid
I .left != N
.left.postorder(visitor)
Line 65:
visitor(.data)
 
F preorder2(&d, level = 0) -> NVoid
d[level].append(.data)
I .left != N
Line 4,504:
LevelOrder = new Enumerable
{
Queue<Node> queue := class Queue<Node>.allocate(4).push:(self);
Enumerator enumerator() = new Enumerator
Line 9,754:
level-order: 1 2 3 4 5 6 7 8 9
</pre>
 
=={{header|Refal}}==
<syntaxhighlight lang="refal">$ENTRY Go {
= <Show Preorder <Tree>>
<Show Inorder <Tree>>
<Show Postorder <Tree>>
<Show Levelorder <Tree>>;
};
 
Show {
s.F t.T = <Prout s.F ': ' <Mu s.F t.T>>;
};
 
Tree {
= (1 (2 (4 (7 () ()) ()) (5 () ())) (3 (6 (8 () ()) (9 () ())) ()));
};
 
Preorder {
() = ;
(s.V t.L t.R) = s.V <Preorder t.L> <Preorder t.R>;
};
 
Inorder {
() = ;
(s.V t.L t.R) = <Inorder t.L> s.V <Inorder t.R>;
};
 
Postorder {
() = ;
(s.V t.L t.R) = <Postorder t.L> <Postorder t.R> s.V;
};
 
Levelorder {
= ;
() e.Q = <Levelorder e.Q>;
(s.V t.L t.R) e.Q = s.V <Levelorder e.Q t.L t.R>;
};</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
Levelorder : 1 2 3 4 5 6 7 8 9</pre>
 
=={{header|REXX}}==
Line 11,211 ⟶ 11,253:
{{trans|Kotlin}}
The object-oriented version.
<syntaxhighlight lang="ecmascriptwren">class Node {
construct new(v) {
_v = v
1,480

edits