Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
69
Task/Tree-traversal/XPL0/tree-traversal.xpl0
Normal file
69
Task/Tree-traversal/XPL0/tree-traversal.xpl0
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
def \Node\ Left, Data, Right;
|
||||
|
||||
proc PreOrder(Node); \Traverse tree at Node in preorder
|
||||
int Node;
|
||||
[if Node # 0 then
|
||||
[IntOut(0, Node(Data)); ChOut(0, ^ );
|
||||
PreOrder(Node(Left));
|
||||
PreOrder(Node(Right));
|
||||
];
|
||||
];
|
||||
|
||||
proc InOrder(Node); \Traverse tree at Node in inorder
|
||||
int Node;
|
||||
[if Node # 0 then
|
||||
[InOrder(Node(Left));
|
||||
IntOut(0, Node(Data)); ChOut(0, ^ );
|
||||
InOrder(Node(Right));
|
||||
];
|
||||
];
|
||||
|
||||
proc PostOrder(Node); \Traverse tree at Node in postorder
|
||||
int Node;
|
||||
[if Node # 0 then
|
||||
[PostOrder(Node(Left));
|
||||
PostOrder(Node(Right));
|
||||
IntOut(0, Node(Data)); ChOut(0, ^ );
|
||||
];
|
||||
];
|
||||
|
||||
proc LevelOrder(Node); \Traverse tree at Node in level-order
|
||||
int Node;
|
||||
def S=100*3; \size of queue (must be a multiple of 3 for wrap-around)
|
||||
int Q(S), \queue (FIFO)
|
||||
F, E; \fill and empty indexes
|
||||
|
||||
proc EnQ(Node); \Enqueue Node
|
||||
int Node;
|
||||
[Q(F):= Node(Left); F:= F+1;
|
||||
Q(F):= Node(Data); F:= F+1;
|
||||
Q(F):= Node(Right); F:= F+1;
|
||||
if F >= S then F:= 0;
|
||||
];
|
||||
|
||||
proc DeQ; \Dequeue Node
|
||||
[Node(Left):= Q(E); E:= E+1;
|
||||
Node(Data):= Q(E); E:= E+1;
|
||||
Node(Right):= Q(E); E:= E+1;
|
||||
if E >= S then E:= 0;
|
||||
];
|
||||
|
||||
[F:= 0; E:= 0; \empty queue
|
||||
EnQ(Node);
|
||||
while E # F do
|
||||
[DeQ;
|
||||
IntOut(0, Node(Data)); ChOut(0, ^ );
|
||||
if Node(Left) # 0 then
|
||||
EnQ(Node(Left));
|
||||
if Node(Right) # 0 then
|
||||
EnQ(Node(Right));
|
||||
];
|
||||
];
|
||||
|
||||
int Tree;
|
||||
[Tree:= [[ [[0,7,0],4,0], 2, [0,5,0]], 1, [ [[0,8,0], 6, [0,9,0]], 3, 0 ]];
|
||||
Text(0, "preorder: "); PreOrder(Tree); CrLf(0);
|
||||
Text(0, "inorder: "); InOrder(Tree); CrLf(0);
|
||||
Text(0, "postorder: "); PostOrder(Tree); CrLf(0);
|
||||
Text(0, "level-order: "); LevelOrder(Tree); CrLf(0);
|
||||
]
|
||||
Loading…
Add table
Add a link
Reference in a new issue