June 2018 Update
This commit is contained in:
parent
ba8067c3b7
commit
22f33d4004
5278 changed files with 84726 additions and 14379 deletions
103
Task/Tree-traversal/Elena/tree-traversal.elena
Normal file
103
Task/Tree-traversal/Elena/tree-traversal.elena
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
import extensions.
|
||||
import extensions'routines.
|
||||
import system'collections.
|
||||
|
||||
class Node
|
||||
{
|
||||
type<IntNumber> rprop value :: _value.
|
||||
type<Node> rprop left :: _left.
|
||||
type<Node> rprop right :: _right.
|
||||
|
||||
constructor new(IntNumber value)
|
||||
[
|
||||
_value := value.
|
||||
]
|
||||
|
||||
constructor new(IntNumber value, Node left)
|
||||
[
|
||||
_value := value.
|
||||
_left := left.
|
||||
]
|
||||
|
||||
constructor new(IntNumber value, Node left, Node right)
|
||||
[
|
||||
_value := value.
|
||||
_left :=left.
|
||||
_right :=right.
|
||||
]
|
||||
|
||||
Preorder = BaseEnumerable::
|
||||
{
|
||||
enumerator = CompoundEnumerator new(SingleEnumerable new(_value), _left Preorder \ back:$nil, _right Preorder \ back:$nil).
|
||||
}.
|
||||
|
||||
Inorder = BaseEnumerable::
|
||||
{
|
||||
enumerator
|
||||
[
|
||||
if ($nil != _left)
|
||||
[
|
||||
^ CompoundEnumerator new(_left Inorder, SingleEnumerable new(_value), _right Inorder \ back:$nil).
|
||||
];
|
||||
[
|
||||
^ SingleEnumerable new(_value)
|
||||
]
|
||||
]
|
||||
}.
|
||||
|
||||
Postorder = BaseEnumerable::
|
||||
{
|
||||
enumerator
|
||||
[
|
||||
if ($nil == _left)
|
||||
[
|
||||
^ SingleEnumerable new(_value)
|
||||
];
|
||||
if ($nil == _right)
|
||||
[
|
||||
^ CompoundEnumerator new(_left Postorder, SingleEnumerable new(_value)).
|
||||
];
|
||||
[
|
||||
^ CompoundEnumerator new(_left Postorder, _right Postorder, SingleEnumerable new(_value)).
|
||||
]
|
||||
]
|
||||
}.
|
||||
|
||||
LevelOrder = BaseEnumerable::
|
||||
{
|
||||
queue<Node> queue := (queue<Node>(4)) push:$self.
|
||||
|
||||
enumerator = Enumerator::
|
||||
{
|
||||
next = queue isNotEmpty.
|
||||
|
||||
get
|
||||
[
|
||||
type<Node> item := queue pop.
|
||||
type<Node> left := item left.
|
||||
type<Node> right := item right.
|
||||
|
||||
if ($nil != left)
|
||||
[
|
||||
queue push(left).
|
||||
].
|
||||
if ($nil != right)
|
||||
[
|
||||
queue push(right).
|
||||
].
|
||||
|
||||
^ item value.
|
||||
]
|
||||
}.
|
||||
}.
|
||||
}
|
||||
|
||||
program =
|
||||
[
|
||||
var tree := Node new(1, Node new(2, Node new(4, Node new(7)), Node new(5)), Node new(3, Node new(6, Node new(8), Node new(9)))).
|
||||
|
||||
console printLine("Preorder :", tree Preorder).
|
||||
console printLine("Inorder :", tree Inorder).
|
||||
console printLine("Postorder :", tree Postorder).
|
||||
console printLine("LevelOrder:", tree LevelOrder).
|
||||
].
|
||||
Loading…
Add table
Add a link
Reference in a new issue