home *** CD-ROM | disk | FTP | other *** search
- OPT MODULE -> Make a module of these classes
- OPT EXPORT -> Export everything
-
- /* ------------------------------- */
- /* The (abstract) base class, tree */
- /* ------------------------------- */
-
- OBJECT tree PRIVATE -> All data is private
- left:PTR TO tree, right:PTR TO tree
- ENDOBJECT
-
- /* Count nodes */
- PROC nodes() OF tree
- DEF tot=1
- IF self.left THEN tot:=tot+self.left.nodes()
- IF self.right THEN tot:=tot+self.right.nodes()
- ENDPROC tot
-
- /* Count leaves, and optionally show them */
- PROC leaves(show=FALSE) OF tree
- DEF tot=0
- IF self.left
- tot:=tot+self.left.leaves(show)
- ENDIF
- IF self.right
- tot:=tot+self.right.leaves(show)
- ELSEIF self.left=NIL -> Both NIL, so a leaf
- IF show THEN self.print_node()
- tot++
- ENDIF
- ENDPROC tot
-
- /* Abstract method, add */
- PROC add(x) OF tree IS EMPTY
-
- /* Abstract method, print_node */
- PROC print_node() OF tree IS EMPTY
-
- /* Print the tree in order, left to right */
- PROC print() OF tree
- IF self.left THEN self.left.print()
- self.print_node()
- IF self.right THEN self.right.print()
- ENDPROC
-
-
- /* ---------------------- */
- /* The integer_tree class */
- /* ---------------------- */
-
- /* Inherit tree */
- OBJECT integer_tree OF tree PRIVATE -> All data is private
- int
- ENDOBJECT
-
- /* Constructor, start with one integer */
- PROC create(i) OF integer_tree
- self.int:=i
- ENDPROC
-
- /* Add an integer */
- PROC add(i) OF integer_tree
- DEF p:PTR TO integer_tree
- IF i < self.int
- IF self.left
- self.left.add(i)
- ELSE
- self.left:=NEW p.create(i)
- ENDIF
- ELSEIF i > self.int
- IF self.right
- self.right.add(i)
- ELSE
- self.right:=NEW p.create(i)
- ENDIF
- ENDIF
- ENDPROC
-
- /* Print a node */
- PROC print_node() OF integer_tree
- WriteF('\d ', self.int)
- ENDPROC
-