【问题标题】:List all leaves of Huffman tree列出霍夫曼树的所有叶子
【发布时间】:2018-08-14 15:30:09
【问题描述】:

这是我的 Huffman 编码,它返回一个空列表。我的目的是让它将所有对添加到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)

【问题讨论】:

  • 你可以setfappend的结果
  • 如果我在任何算法语言中使用var + 5,为什么不将var 增加5

标签: list append scheme huffman-code r5rs


【解决方案1】:

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

霍夫曼树(我假设)是叶子吗?在这种情况下,它有符号和重量。否则它有 LEFT-BRANCH 和 RIGHT-BRANCH。

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

(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
      ))

希望有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多