我想从二进制列表中递归地重建霍夫曼树。
def lire_arbre (table=[1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0],arbre=None,direction='G'): ### en cours
if arbre is None : # Création de l'arbre avec 2 fils - On suppose que le texte a au moins deux caratères
print('arbre none')
arbre=Noeud()
arbre.filsG = Noeud()
arbre.filsD = Noeud()
direction = 'G' # Initialisation de la direction à Gauche
table = table[1:] # On supprime le premier élément de la liste
lire_arbre(table,arbre,direction)
else :
if len(table)>0 :
bit = table[0] # Lecture du premier bit de la liste : si 0 => feuille si 1 =>branche
print(table)
if bit == 1: # Création d'un nouveau noeud
print('création noeud')
arbre.filsG = Noeud() # Création filsG
arbre.filsD = Noeud() # Création filsD
direction = 'G' # A la création de chaque noeud direction par défaut G
table=table[1:] # On supprime le premier élément de la liste
lire_arbre(table,arbre,direction)
else : # On est sur une feuille
print(arbre)
if direction == 'G': # Si direction = G, on renseigne la valeur de la feuille
print('création fG')
print('chr',chr(decode_base2(table[1:9])))
arbre.filsG.val = chr(decode_base2(table[1:9]))
arbre.filsG.feuille = True
direction = 'D' # Si feuille = fin de descente à gauche
table=table[9:] # On supprime les 9 premiers bits : bit[0] = 0 indication feuille bit[1:9] = codage binaire du caractère
lire_arbre(table,arbre.filsG,direction)
else:
print('création fD')
print('chr',chr(decode_base2(table[1:9])))
arbre.filsD.val = chr(decode_base2(table[1:9]))
arbre.filsD.val = True
direction = 'G'
table=table[9:] # On supprime les 9 premiers bits : bit[0] = 0 indication feuille bit[1:9] = codage binaire du caractère
if len(table)>0:
lire_arbre(table,arbre.filsD,direction)
return arbre
a = lire_arbre() 阿尔伯无 [0,0,1,1,0,0,0,1,1,1,0,0,1,1,0,0,0,0,1,0,0,1,1,0,0 ,0,1,0] << strong>主要。位于0x0358C110的Noeud对象 fG证书 chr c [1,0,0,1,1,1,0,0,0,1,0,0,1,1,1,0,0,0,1,0] 狂欢节 [0,0,1,1,0,0,0,0,1,0,0,1,1,0,0,0,1,0] << strong>主要。位于0x0358C130的Noeud对象 fG证书 chr a [0,0,1,1,0,0,0,1,0] << strong>主要。位于0x0358C190的Noeud对象 证书 chr b 追溯(最近一次通话): 文件“”,第1行,位于 lire_arbre中的文件“ C:\ Users \ Fred \ Desktop \ projetHuffman \ monHuffman.py”,第229行 lire_arbre(表,arbre,方向) 文件“ C:\ Users \ Fred \ Desktop \ projetHuffman \ monHuffman.py”,第251行,在lire_arbre中 lire_arbre(表,arbre.filsG,方向) 文件“ C:\ Users \ Fred \ Desktop \ projetHuffman \ monHuffman.py”,第240行,位于lire_arbre lire_arbre(表,arbre,方向) 文件“ C:\ Users \ Fred \ Desktop \ projetHuffman \ monHuffman.py”,第251行,在lire_arbre中 lire_arbre(表,arbre.filsG,方向) 文件“ C:\ Users \ Fred \ Desktop \ projetHuffman \ monHuffman.py”,行255,位于lire_arbre arbre.filsD.val = chr(decode_base2(table [1:9])) AttributeError:“ NoneType”对象没有属性“ val”