Exercise 2.69
(define (generate-huffman-tree pairs)
(successive-merge (make-leaf-set pairs)))
(define (successive-merge leaf-set)
(if (null? leaf-set)
'()
(let ((first (car leaf-set))
(last (cdr leaf-set)))
(if (null? last)
first
(successive-merge (adjoin-set (make-code-tree first (car last))
(cdr last)))))))
(define pairs1 '((A 4) (B 2) (C 1) (D 1)))
(define pairs2 '((A 8) (B 3) (C 1) (D 1) (E 1) (F 1) (G 1) (H 1)))
(generate-huffman-tree pairs1)
(generate-huffman-tree pairs2)
; 结果如下
'((leaf A 4) ((leaf B 2) ((leaf D 1) (leaf C 1) (D C) 2) (B D C) 4) (A B D C) 8)
'((leaf A 8)
((((leaf H 1) (leaf G 1) (H G) 2) ((leaf F 1) (leaf E 1) (F E) 2) (H G F E) 4)
(((leaf D 1) (leaf C 1) (D C) 2) (leaf B 3) (D C B) 5)
(H G F E D C B)
9)
(A H G F E D C B)
17)