У меня сейчас странная проблема с дисплеем.Когда я запускаю программу, выполнив следующие действия: t У меня есть такой результат: результат выполнения t.exe
, что, по сути, является началом моей программы:
Однако, когда я использую gdb следующим образом: gdb t.exe, все работает так: результат выполнения в режиме отладки
Ниже приведен мой код (извините, это не чисто: /)
#include <stdio.h>
#include <stdlib.h>
typedef int typeElem;
typedef struct aa {
typeElem v ;
struct aa * fg , * fd ; // les fils gauche et droit
} abr;
#define arbre_vide NULL
typedef abr *arbre;
typedef int boolean;
arbre consa(typeElem x, arbre fils_gauche, arbre fils_droit) {
arbre N = malloc ( sizeof( arbre ) ) ;
N->fg = fils_gauche;
N->fd = fils_droit;
N->v = x;
return N;
}
void destruct(arbre ABR) {
free(ABR);
}
arbre gauche(arbre ABR) {
return ABR->fg;
}
arbre droit(arbre ABR) {
return ABR->fd;
}
int estVideArbre(arbre ABR) {
return (ABR == NULL);
}
typeElem racine(arbre ABR){
return (ABR->v);
}
/*
void destructAbr(arbre ABR){
if(!estVideArbre(ABR)){
destructAbr(gauche(ABR));
destructAbr(droit(ABR));
}
}
*/
void infixe(arbre ABR){
if(!(ABR == NULL)){
infixe(ABR->fg);
printf("%d ", ABR->v);
infixe(ABR->fd);
}
else {
//printf("est null \n");
}
}
void prefixe(arbre ABR){
if(!estVideArbre(ABR)){
printf("%d ", ABR->v);
infixe(ABR->fg);
infixe(ABR->fd);
}
}
void postfixe(arbre ABR){
if(!estVideArbre(ABR)){
infixe(gauche(ABR));
infixe(droit(ABR));
printf("%d ", racine(ABR));
}
}
int nbrTotalNoeuds(arbre ABR) {
if(estVideArbre(ABR))
return 0;
return 1 + nbrTotalNoeuds(gauche(ABR)) + nbrTotalNoeuds(droit(ABR));
}
int nbreNoeudsDe2Fils(arbre ABR) {
if( !estVideArbre(gauche(ABR)) && !estVideArbre(droit(ABR)) ){
return 1 + nbreNoeudsDe2Fils(gauche(ABR)) + nbreNoeudsDe2Fils(droit(ABR));
}
else if (!estVideArbre(gauche(ABR)) && estVideArbre(droit(ABR)) ) {
return nbreNoeudsDe2Fils(gauche(ABR));
}
else if (estVideArbre(gauche(ABR)) && !estVideArbre(droit(ABR)) ) {
return nbreNoeudsDe2Fils(droit(ABR));
}
else {
return 0;
}
}
int nbreNoeudsDe1Fils(arbre ABR) {
if( gauche(ABR) != NULL && droit(ABR) != NULL ) {
return 0 + nbreNoeudsDe1Fils(gauche(ABR)) + nbreNoeudsDe1Fils(droit(ABR));
}
else if( gauche(ABR) != NULL && droit(ABR) == NULL ) {
return 1 + nbreNoeudsDe1Fils(gauche(ABR));
}
else if( gauche(ABR) == NULL && droit(ABR) != NULL ) {
return 1 + nbreNoeudsDe1Fils(droit(ABR));
}
else {
return 0;
}
}
/*
5
/ \
3 6
/ \ \
2 4 7
\
9
*/
int main() { //test
printf("Lancement du programme \n");
arbre rac_g = consa(2,arbre_vide,arbre_vide);
arbre rac_d = consa(4,arbre_vide,arbre_vide);
arbre rac_d_d_d = consa(9,arbre_vide,arbre_vide);
arbre rac_d_d = consa(7,arbre_vide,rac_d_d_d);
arbre fg = consa(3,rac_g,rac_d);
arbre fd = consa(6,arbre_vide,rac_d_d);
arbre sommet = consa(5,fg,fd);
printf("\nEn ordre infixe : ");
infixe(sommet);
printf("\nEn ordre prefixe : ");
prefixe(sommet);
printf("\nEn ordre postfixe : ");
postfixe(sommet);
printf("\nNombre de noeuds dans cette arbre : %d\n", nbrTotalNoeuds(sommet));
printf("Nombre de noeuds a 2 fils : %d\n", nbreNoeudsDe2Fils(sommet));
printf("Nombre de noeuds a 1 fils : %d\n", nbreNoeudsDe1Fils(sommet));
// destructAbr(sommet);
return 0;
}