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