如何重建霍夫曼树?

时间:2019-06-26 14:37:07

标签: python-3.x

我想从二进制列表中递归地重建霍夫曼树。

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”

    
  

0 个答案:

没有答案