RosettaCodeData/Task/Tree-traversal/M2000-Interpreter/tree-traversal-2.m2000
2023-07-01 13:44:08 -04:00

83 lines
2.4 KiB
Text

Module OOP {
\\ Class is a global function (until this module end)
Class Null {
}
\\ Null is a pointer to an object returned from class Null()
Global Null->Null()
Class Node {
Public:
x, Group LeftNode, Group RightNode
Class:
\\ after class: anything exist one time,
\\ not included in final object
Module Node {
.LeftNode<=Null
.RightNode<=Null
Read .x
\\ read ? for optional values
Read ? .LeftNode, .RightNode
}
}
\\ NodeTree return a pointer to a new Node
Function NodeTree {
\\ ![] pass currrent stack to Node()
->Node(![])
}
Tree=NodeTree(1, NodeTree(2,NodeTree(4, NodeTree(7)), NodeTree(5)), NodeTree(3, NodeTree(6, NodeTree(8), NodeTree(9))))
Module preorder (T) {
Print "preorder: ";
printtree(T)
Print
sub printtree(T as pointer)
If T is Null then Exit sub
Print T=>x;" ";
printtree(T=>LeftNode)
printtree(T=>RightNode)
end sub
}
preorder Tree
Module inorder (T) {
Print "inorder: ";
printtree(T)
Print
sub printtree(T as pointer)
If T is Null then Exit sub
printtree(T=>LeftNode)
Print T=>x;" ";
printtree(T=>RightNode)
end sub
}
inorder Tree
Module postorder (T) {
Print "postorder: ";
printtree(T)
Print
sub printtree(T as pointer)
If T is Null then Exit sub
printtree(T=>LeftNode)
printtree(T=>RightNode)
Print T=>x;" ";
end sub
}
postorder Tree
Module level_order (T) {
Print "level-order: ";
Stack New {
printtree(T)
if empty then exit
Read T
Loop
}
Print
sub printtree(T as pointer)
If T is Null else
Print T=>x;" ";
Data T=>LeftNode, T=>RightNode
end if
end sub
}
level_order Tree
}
OOP