home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / coders / jËzyki_programowania / amigae / e_v3.2a / src / guide / tree.e < prev    next >
Text File  |  1977-12-31  |  2KB  |  83 lines

  1. OPT MODULE  -> Make a module of these classes
  2. OPT EXPORT  -> Export everything
  3.  
  4. /* ------------------------------- */
  5. /* The (abstract) base class, tree */
  6. /* ------------------------------- */
  7.  
  8. OBJECT tree PRIVATE  -> All data is private
  9.   left:PTR TO tree, right:PTR TO tree
  10. ENDOBJECT
  11.  
  12. /* Count nodes */
  13. PROC nodes() OF tree
  14.   DEF tot=1
  15.   IF self.left  THEN tot:=tot+self.left.nodes()
  16.   IF self.right THEN tot:=tot+self.right.nodes()
  17. ENDPROC tot
  18.  
  19. /* Count leaves, and optionally show them */
  20. PROC leaves(show=FALSE) OF tree
  21.   DEF tot=0
  22.   IF self.left
  23.     tot:=tot+self.left.leaves(show)
  24.   ENDIF
  25.   IF self.right
  26.     tot:=tot+self.right.leaves(show)
  27.   ELSEIF self.left=NIL  -> Both NIL, so a leaf
  28.     IF show THEN self.print_node()
  29.     tot++
  30.   ENDIF
  31. ENDPROC tot
  32.  
  33. /* Abstract method, add */
  34. PROC add(x) OF tree IS EMPTY
  35.  
  36. /* Abstract method, print_node */
  37. PROC print_node() OF tree IS EMPTY
  38.  
  39. /* Print the tree in order, left to right */
  40. PROC print() OF tree
  41.   IF self.left  THEN self.left.print()
  42.   self.print_node()
  43.   IF self.right THEN self.right.print()
  44. ENDPROC
  45.  
  46.  
  47. /* ---------------------- */
  48. /* The integer_tree class */
  49. /* ---------------------- */
  50.  
  51. /* Inherit tree */
  52. OBJECT integer_tree OF tree PRIVATE  -> All data is private
  53.   int
  54. ENDOBJECT
  55.  
  56. /* Constructor, start with one integer */
  57. PROC create(i) OF integer_tree
  58.   self.int:=i
  59. ENDPROC
  60.  
  61. /* Add an integer */
  62. PROC add(i) OF integer_tree
  63.   DEF p:PTR TO integer_tree
  64.   IF i < self.int
  65.     IF self.left
  66.       self.left.add(i)
  67.     ELSE
  68.       self.left:=NEW p.create(i)
  69.     ENDIF
  70.   ELSEIF i > self.int
  71.     IF self.right
  72.       self.right.add(i)
  73.     ELSE
  74.       self.right:=NEW p.create(i)
  75.     ENDIF
  76.   ENDIF
  77. ENDPROC
  78.  
  79. /* Print a node */
  80. PROC print_node() OF integer_tree
  81.   WriteF('\d ', self.int)
  82. ENDPROC
  83.