列出所有哈夫曼树的叶子

时间:2018-03-06 17:16:46

标签: list append scheme huffman-code r5rs

这是我的霍夫曼编码,它返回一个空列表。我的目的是让它将所有对添加到listenr1但它接缝只返回一个空列表。我不确定为什么它不会附加,但我认为我误解了Scheme编程的一个基本部分。我不想使用append*。我认为附加可能是错误的,但我不确定为什么。有没有办法在每次附加时替换listenr1

(define (huffman-leafs tree)
  (let ((listenr1 '()))
    (define (iterator currentbranch)
      (let ((left (left-branch currentbranch))
            (right (right-branch currentbranch)))
        (if (leaf? left)
            (list (symbols left) (weight left))
            (append listenr1 (iterator left)))
        (if (leaf? right)
            (list (symbols right) (weight right))
            (append listenr1 (iterator right)))))
    (iterator tree)
    listenr1))

(huffman-leafs mytree)

1 个答案:

答案 0 :(得分:0)

您编写的代码看起来是一个不错的开始,但是它混合了递归和非递归的习惯用法。

霍夫曼树(我想)是叶?在这种情况下,它具有符号和重量。否则,它有左分支和右分支。

因此,我们可以定义一个递归函数来列出所有叶子,如下所示:

(define (huffman-leafs tree)
  (if (leaf? tree)
      ;;; list this leaf alone
      ;;; else, use recursion (huffman-leafs (left-branch tree)) and right branch
      ;; and APPEND those together
      ))

希望有帮助!