t-binary-tree-set.scm 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. ;; import numbers/linear-random.scm data-structures/binary-tree-set.scm data-structures/print-tree.scm
  2. (define (reflect node)
  3. (lambda (branch leaf)
  4. (if (null? node)
  5. (leaf set-empty)
  6. (branch (set-left node)
  7. (set-value node)
  8. (set-right node)))))
  9. (define print-tree (make-tree-printer reflect))
  10. (define (make-random-tree n t)
  11. (if (< n 0)
  12. t
  13. (make-random-tree
  14. (- n 1)
  15. (set-add t (modulo (random!) 10)))))
  16. (define tree1 (make-random-tree 10 set-empty))
  17. (define tree2 (make-random-tree 10 set-empty))
  18. (define tree3 (set-union tree1 tree2))
  19. (define tree4 (make-random-tree 5 set-empty))
  20. (define tree5 (set-subtract tree3 tree4))
  21. (define (header text)
  22. (newline)
  23. (display text)
  24. (newline)
  25. (display "------------------------------")
  26. (newline))
  27. (header "t1: random tree of [0-9] * 10")
  28. (print-tree tree1)
  29. (header "t2: random tree of [0-9] * 10")
  30. (print-tree tree2)
  31. (header "t3: t1 + t2")
  32. (print-tree tree3)
  33. (header "t4: random tree of [0-9] * 5")
  34. (print-tree tree4)
  35. (header "t5: t3 - t4")
  36. (print-tree tree5)
  37. (header "tree->list: sum of each tree")
  38. (for-each (lambda (t)
  39. (display (set->list t))
  40. (display ": ")
  41. (display (set-fold (lambda (x y) (+ x y)) 0 t))
  42. (newline))
  43. (list tree1 tree2 tree3 tree4 tree5))