Ich schreibe ein Programm, um einen vorgefertigten Baum zu durchlaufen. Ich weiß nichts über die Baumstruktur, soweit es die Anzahl der Knoten, die Position der Knoten usw. betrifft, aber ich muss alle Knoten durchqueren und die Werte der Knoten summieren. stürzt nur ohne NachrichtenBaumrekursion kompiliert, stürzt aber bei Ausführung ab
int sumTheTreeValues(struct node* root)
{
int sum = root->value;
if(!root->left){
sum = sum + sumTheTreeValues(root->left);
}
else if(!root->right){
sum = sum + sumTheTreeValues(root->right);
}
return sum;
}
Der Compiler keinen Fehler wirft, aber wenn ich versuche, es zu laufen:
Der Knoten ist definiert als
struct node
{
int value;
node* left;
node* right;
}
Und meine rekursive Funktion ist die folgende . Nur um die Plausibilitätsprüfung zu überprüfen, druckte ich den Knotenwert, um sicherzustellen, dass der Stamm nicht null
ist. Ich habe eine Ahnung, dass es mit Rekursionstermination in Verbindung stehen könnte, aber ich bin mir nicht sicher, was ich noch hinzufügen soll, da ich nach null
Kindern suche.
'if (! Wurzel-> links) {' bedeutet, wenn es ein 'NULL' Zeiger ist, so dass Sie nur die Funktion mit' NULL' Zeiger aufrufen und dereferenzieren es am Anfang. – mch
@mch oh, ja! Das hat es behoben. Verwirre mich dort. Vielen Dank! – dorojevets
Das "else" scheint kontraproduktiv zu sein, wenn Sie alle Knoten besuchen möchten. – EOF