Saltar a contenido

Arboles binarios

#lang eopl
#|
<tree> ::= <int>
            leaf(datum)
       ::= <symbol> <tree> <tree>
            node(key, left, right)

|#

(define-datatype tree tree?
  (leaf (datum number?))
  (node
   (key symbol?)
   (left tree?)
   (right tree?)
   ))

;; Area del programador

(define treeA
  (node 'a
        (node 'b
              (node 'd
                   (node 'h (leaf 7) (leaf 8))
                   (node 'i (leaf 9) (leaf 10))
               )
              (node 'e (leaf 1) (leaf 2))
        )
        (node 'c
              (node 'f (leaf 3) (leaf 4) )
              (node 'g (leaf 5) (leaf 6) )
              )
        )
  )

;; preorder: tree -> lista
(define preorder
  (lambda (t)
    (cases tree t
      (leaf  (datum) (list datum))
      (node (key left right)
       (append
        (list key)
        (preorder left)
        (preorder right)
        )
      ))))


(display (preorder treeA))
(display "\n")


(define posorder
  (lambda (t)
    (cases tree t
      (leaf  (datum) (list datum))
      (node (key left right)
       (append
        (posorder left)
        (posorder right)
        (list key)
        )
      ))))


(display (posorder treeA))
(display "\n")


(define inorder
  (lambda (t)
    (cases tree t
      (leaf  (datum) (list datum))
      (node (key left right)
       (append
        (inorder left)
        (list key)
        (inorder right)
        )
      ))))


(display (inorder treeA))
(display "\n")