Основная проблема с вашей логикой - использование elif
def printCode(node):
if node.left:
node.left.prefix = node.prefix+"0"
printCode(node.left)
if node.right:
node.right.prefix = node.prefix+"1"
printCode(node.right)
if node.internal == False:
print(node.data,node.prefix)
Таким образом, оно будет проходить по левой стороне дерева, пока не достигнет листа, когда оно достигнет листа, оно будетраспечатать данные узла.В этот момент в коде он возвращается к последнему рекурсивному вызову (узлу перед листом) и переходит к правому узлу, если этот правый узел является листом, он выводит информацию о своем узле, затем он возвращаетсяна последний рекурсивный вызов
Дайте мне знать, если вам нужно более подробное объяснение, или если было недоразумение, и это не делает то, что вы хотите, чтобы
ОБНОВЛЕНИЕ:
class Node:
def __init__(self,data,internal=False):
self.data = data #frequency of a char
self.internal = internal
self.left = None
self.right = None
#Add a prefix to your nodes, so each node keeps track of its own prefix
self.prefix = ""