1procedure buildHuffmanTree(frequencies)
2 create leaf node for each symbol
3 insert all nodes into priority queue
4 while queue.size > 1
5 left ← extractMin(queue)
6 right ← extractMin(queue)
7 internal ← new node(freq = left.freq + right.freq)
8 internal.left ← left, internal.right ← right
9 insert internal into queue
10 return queue root (the Huffman tree)
11procedure generateCodes(node, prefix)
12 if node is leaf: code[node.symbol] ← prefix
13 else: recurse left with prefix+"0", right with prefix+"1"