Dernière lignes de code de l’année, et ça coince. j’aurai voulu finir l'année sans bugs, mais bon, le code

J'essaie, depuis 3 jours de crée un arbre binaire pour compressée une image grâce a l'algorithme de Shanon-Fano.
Le résultat voulu :

http://tpecompression.free.fr/?p=stat
Les arbres binaire, c'est du nouveau pour moi. J'ai trouvé un topic sur le forum qu'y explique bien le principe, je remercie hzj74 pour ce tuto. ( http://www.purebasic.fr/french/viewtopic.php?t=6244 )
j'ai donc bidouillé pour essayé de mélanger les 2, et arrivé au résultat voulu, mais ca coince, ca ne part pas dans les branche "1" de arbre. ce qui donne ce résultat :
Code : Tout sélectionner
18 0
17 00
8 000
6 0000
4 00000
2 000000
0 0000000
Pour le bout de code :
Code : Tout sélectionner
Global Dim monArray(18)
monArray(0) = 18
monArray(1) = 2
monArray(2) = 6
monArray(3) = 2
monArray(4) = 6
monArray(5) = 4
monArray(6) = 2
monArray(7) = 4
monArray(8) = 4
monArray(9) = 6
monArray(10) = 4
monArray(11) = 17
monArray(12) = 2
monArray(13) = 8
monArray(14) = 2
monArray(15) = 2
monArray(16) = 2
monArray(17) = 4
monArray(18) = 0
SortArray(monArray(), #PB_Sort_Descending)
Structure ARB
valeur.b
*_0.ARB
*_1.ARB
EndStructure
; Procédure de création des arbres ou sous-arbres
Procedure arbre(*node.ARB,n)
If *node ; le noeud existe déjà
If n = *node\valeur
*node\valeur = n
ElseIf n < *node\valeur
*node\_0=arbre(*node\_0,n)
Else
*node\_1=arbre(*node\_1,n)
EndIf
Else
*node = AllocateMemory(SizeOf(ARB))
If *node ; le noeud a été créé avec succès
*node\valeur = n
*node\_0 = #Null
*node\_1 = #Null
EndIf
EndIf
ProcedureReturn *node
EndProcedure
Global binary.s,pass
Procedure affiche(*node.ARB,startBin.s)
If pass=0 : binary.s=startBin.s : pass=1: EndIf
If *node\_1 <> #Null : binary.s=binary.s+"1" : affiche(*node\_1,"") : EndIf
Debug Str(*node\valeur)+" "+binary.s
If *node\_0 <> #Null : binary.s=binary.s+"0" : affiche(*node\_0,"") : EndIf
EndProcedure
; traitement ------------------------------------------------------------------
For i=0 To ArraySize(monArray())
*arbre_0=arbre(*arbre_0,monArray(i))
Next
affiche(*arbre_0,"0")
Arbrakan