Huffman coding: Difference between revisions

Content deleted Content added
Line 1,339:
var trees treeHeap
for c, f := range charFreqs {
trees = append(trees, &HuffmanLeaf{f, c})
}
heap.Init(&trees)
Line 1,348:
 
// put into new node and re-insert into queue
heap.Push(&trees, &HuffmanNode{a.Freq() + b.Freq(), a, b})
}
return heap.Pop(&trees).(HuffmanTree)
Line 1,355:
func printCodes(tree HuffmanTree, prefix []int) {
switch i := tree.(type) {
case *HuffmanLeaf:
// print out character, frequency, and code for this leaf (which is just the prefix)
fmt.Printf("%c\t%d\t%s\n", i.value, i.freq, string(prefix))
case *HuffmanNode:
// traverse left
prefix = append(prefix, '0')