June 2018 Update

This commit is contained in:
Ingy döt Net 2018-06-22 20:57:24 +00:00
parent ba8067c3b7
commit 22f33d4004
5278 changed files with 84726 additions and 14379 deletions

View 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).
].