tree-sort.scm 735 B

1234567891011121314151617181920212223242526
  1. (define (make-node value) (list 'node value #f #f))
  2. (define (node-value t) (cadr t))
  3. (define (left-branch t) (caddr t))
  4. (define (right-branch t) (cadddr t))
  5. (define (set-left-branch! t v) (set-car! (cddr t) v) t)
  6. (define (set-right-branch! t v) (set-car! (cdddr t) v) t)
  7. (define (insert value root)
  8. (cond ((not root)
  9. (make-node value))
  10. ((< value (node-value root))
  11. (set-left-branch! root (insert value (left-branch root))))
  12. (else
  13. (set-right-branch! root (insert value (right-branch root))))))
  14. (define (leaves root rest)
  15. (if (not root)
  16. rest
  17. (leaves (left-branch root)
  18. (cons (node-value root)
  19. (leaves (right-branch root)
  20. rest)))))
  21. (define (tree-sort l)
  22. (leaves (fold #f insert l) '()))