Ich muss einen Binärbaum über eine bestimmte Ebene l zurückschneiden und muss die Anzahl der beschnittenen Knoten zurückgeben.C - Binärbaum: kann die korrekte Anzahl der beschnittenen Knoten nicht zurückgeben
Hier ist, was ich habe:
#include "abin.h"
int freeAB (ABin a) {
int count = 0;
if(a == NULL) return count;
count = count + freeAB(a->esq);
count = count + freeAB(a->dir);
free(a);
count++;
return count;
}
int pruneAB (ABin *a, int l) {
int count = 0;
if(l == 0){
count = count + freeAB((*a)->esq);
count = count + freeAB((*a)->dir);
(*a) = NULL;
}
else{
count = count + pruneAB(&((*a)->esq), l-1);
count = count + pruneAB(&((*a)->dir), l-1);
}
return count;
}
ABIN.H:
#include <stdio.h>
#include <stdlib.h>
typedef struct lligada {
int valor;
struct lligada *prox;
} *LInt;
typedef struct nodo {
int valor;
struct nodo *esq, *dir;
} *ABin;
int pruneAB (ABin *a, int l);
Dies ist die Ausgabe von dem, was ich habe sein sollte und was ich habe:
Input: (depth=2)
8
4 12
2 6 10 14
1 3 5 7 9 11 13 15
Output:
[expected] res=12
8
4 12
[obtained] res=8
8
4 12
0/10 correct answers
Interessanterweise, wenn Ich erschaffe etwas wie int r = 0; und mach r ++; Jedes Mal, wenn die Anweisung if (l == 0) wahr ist und dann eine print-Anweisung ausführt, gibt es r 4 mal aus.
Wenn ich 4 zur endgültigen Zählung addierte, würde ich die richtige Antwort bekommen. Ich nehme an, dass ich dann addieren sollte, um zu zählen, wie oft if (l == 0) wahr ist.
(Ich kann es nicht tun. Wenn ich zählen kann ++ ich Segmentierungsfehler erhalten)
Wie würden Sie es tun? Vielen Dank.
https://codeboard.io/projects/16275
Ich schlage vor, Sie 'gdb' zu sehen, wo die' Segmentierung fault' –
tritt auf, wenn Sie einen Absturz zu bekommen (was was ist ein Segmentierungsfehler), dann sollten Sie ein Debug-Build ausführen in einem Debugger. Wenn es in einem Debugger ausgeführt wird, stürzt es "in Aktion" ab und stoppt die Ausführung an der Stelle des Absturzes. Nach dem Stoppen können Sie Werte von Variablen untersuchen, den Funktionsaufruf-Stack untersuchen und sogar den Funktionsaufruf-Stack aufrufen, den Sie ausführen sollten, wenn der Debugger in Code stoppt, der nicht Ihnen gehört. –
Wenn Sie jedoch * keinen * Absturz bekommen, können Sie trotzdem einen Debugger verwenden. Mit einem Debugger, insbesondere in einer IDE, können Sie Ihren Code Zeile für Zeile durchgehen und in Ihre Funktionen einsteigen, um zu sehen, was * wirklich * passiert. Sie können auch Ihre Variablen überwachen und sehen, wie sie Werte ändern. –