我正在基于频率表研究霍夫曼树。频率表是通过对给定字符串中字符的频率进行计数并将相应的项(字符和频率)放置在LinkedList中而生成的。然后,我需要按频率将它们放置在霍夫曼树中。我知道其背后的逻辑是确保每个子树都有右节点和左节点,添加它们的频率,创建具有添加频率的根节点,将下一个频率分别放置在左树和右树中,然后重复此过程直到不再有频率,并且子树与添加其频率的根相连。我遇到的麻烦是弄清楚如何实现代码。
代码相当广泛,所以我宁愿避免发布所有代码,总体布局是,我有一个HuffmanFrequencyTable类,它允许我构建表,一个HuffmanTreeNode类,允许我们创建要放置在树中的节点,以及一个HuffmanTree类,可帮助我们创建实际的树。然后,编码类输入一个字符串,并使用其创建的HuffmanFrequencyTable从该字符串构建树。这是一个家庭作业问题,因此请不要提供解决方案,我只是希望在弄清其代码中的逻辑方面有所帮助。
现在,我正在创建一个放置在树中的字符数组,在表中剩余的不在数组中的字符中找到最低的频率,然后尝试将它们放置在叶子中。当子树中的基础叶子已满时,我尝试添加这些值,创建节点并继续向上树。我为此使用for循环。这似乎是正确的开始吗?
最佳答案
是。您走在正确的轨道上。
对于解码,您使用同一棵树,然后向左或向右遍历,直到到达叶节点,即字符。