【发布时间】:2021-09-28 10:08:29
【问题描述】:
我在这个可视化二叉树的函数中有一些错误,首先我们必须以写入模式打开文件,然后在其中绘制树。 然后我们必须使用命令(它在代码中)生成(.png)文件,以便可视化我们的图片。 PS:在这段代码中,创建树(creer_arbre)和打印树(afficher_arbre)的部分工作得很好,但是当涉及到绘图功能(dessinnerarbre)时,程序就停止工作了。
void dessinArbre (Pointeur_ATib R, FILE* f, int* nbNil)//the function of drawing
{
if (R != NULL)
{
// Dessiner un arc vers le fils gauche
if (Fg_ATib(R) != NULL)
{
fprintf(f, " \"%d\" -- \"%d\" \n", Info_ATib(R), Info_ATib(Fg_ATib(R)));
}
else
{
fprintf(f, " \"NIL%d\" [style=invis];\n", *nbNil);
fprintf(f, " \"%d\" -- \"NIL%d\" ", Info_ATib(R), (*nbNil)++);
fprintf(f, " [style=invis];\n");
}
// Dessiner un fils NIL virtuel et invisible au milieu (pour une meilleure séparation des fils gauches et droits)
fprintf(f, " \"NIL%d\" [style=invis];\n", *nbNil);
fprintf(f, " \"%d\" -- \"NIL%d\" ", Info_ATib(R), (*nbNil)++);
fprintf(f, " [style=invis];\n");
// Dessiner un arc vers le fils droit
if (Fd_ATib(R)!= NULL)
{
fprintf(f, " \"%d\" -- \"%d\" \n", Info_ATib(R), Info_ATib(Fd_ATib(R)));
}
else
{
fprintf(f, " \"NIL%d\" [style=invis];\n", *nbNil);
fprintf(f, " \"%d\" -- \"NIL%d\" ", Info_ATib(R), (*nbNil)++);
fprintf(f, " [style=invis];\n");
}
// Dessiner les sous-arbres gauche et droit
dessinArbre(Fg_ATib(R), f, nbNil);
dessinArbre(Fd_ATib(R), f, nbNil);
}
}
int main(int argc, char *argv[]) //the main programme
{
FILE* f;
char*nomf;
int sortie;
int nbNil=0;
char*cmd;
printf ( " %s", " Introduiser le nombre des elements dans l'arbre " ) ;
scanf ( " %d", &N ) ;
/* lecture de nombre des elments */
Creer_arbre ( & P, & N ) ;
Afficher ( & P ) ;
//dessin du notre arbre
printf ("Dessin de l'arbre \n");
printf (" ----------------- \n\n");
if (P == NULL)
{
printf ("> ERREUR : Arbre vide !");
}
else
{
sprintf(nomf, "arbre%d.dot", sortie);
f = fopen(nomf,"w"); // Ouverture du fichier en écriture.
fprintf(f, "graph arbre {\n");
fprintf(f, "\tordering = out;\n");
fprintf(f, "\tsplines = false;\n");
nbNil = 0;
dessinArbre(P, f, &nbNil);
fprintf(f, "}\n");
fclose(f);
sprintf(cmd, "dot -Tpng arbre%d.dot -o arbre%d.png", sortie);
system(cmd);
sprintf(cmd, "arbre%d.png", sortie);
system(cmd);
sortie++;
printf (">> L'arbre est dessine correctement !");
}
// system("PAUSE");
getchar();
return 0;
}
这是实现:
typedef struct Tib Type_Tib ;
typedef Type_Tib * Typestr_Tib ;
typedef int Type1_Tib ;
typedef bool Type2_Tib ;
struct Tib
{
Type1_Tib Champ1 ;
Type2_Tib Champ2 ;
};
Type1_Tib Struct1_Tib ( Typestr_Tib S)
{
return S->Champ1 ;
}
Type2_Tib Struct2_Tib ( Typestr_Tib S)
{
return S->Champ2 ;
}
void Aff_struct1_Tib ( Typestr_Tib S, Type1_Tib Val )
{
S->Champ1 = Val ;
}
void Aff_struct2_Tib ( Typestr_Tib S, Type2_Tib Val )
{
S->Champ2 = Val ;
}
/** Arbres de recherche binaire **/
typedef Typestr_Tib Typeelem_ATib ;
typedef struct Noeud_ATib * Pointeur_ATib ;
struct Noeud_ATib
{
Typeelem_ATib Val ;
Pointeur_ATib Fg ;
Pointeur_ATib Fd ;
Pointeur_ATib Pere ;
} ;
【问题讨论】:
-
“停止工作”。它在哪里停止工作?它在做什么?这些可以通过调试代码来回答。在调试器中运行和/或添加更多调试打印语句。 How to debug small programs
标签: c function binary-tree visualization draw