簡體   English   中英

列出霍夫曼樹的所有葉子

[英]List all leaves of Huffman tree

這是我的霍夫曼編碼,返回一個空列表。 我的目的是使其將所有對添加到listenr1但它只能返回一個空列表。 我不確定為什么不附加,但我認為我誤解了Scheme編程的基本部分。 我不想使用append* 我認為附加可能是錯誤的,但是我不確定為什么。 有沒有一種方法可以listenr1每次附加后都替換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)

您編寫的代碼看起來是一個不錯的開始,但是它混合了遞歸和非遞歸的習慣用法。

霍夫曼樹(我想)是葉? 在這種情況下,它具有符號和重量。 否則,它具有左分支和右分支。

因此,我們可以定義一個遞歸函數來列出所有葉子,如下所示:

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

希望有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM