Wenn das unterste untergeordnete Kind als Root übergeben wird, ist es nicht null.
void inOrder(struct node* r)
{
if (r==NULL)
return;
else{
inOrder(r->left);
printf("%d ", r->value);
inOrder(r->right);
}
}
In Ihrem obigen Code, wenn Sie die unterste linke Kind als root passieren.
Sie führt zuerst diese Linie
if (r==NULL) return;
als r
nicht gerade null wird es diese Rückkehr überspringen. so, pausiert die aktuelle Ausführung für einen Moment und wieder aufnehmen, wenn dieser Aufruf zurückkehrt
Im anderen Teil würde es jetzt
else{
inOrder(r->left);
Hier ausführen, es ist die gleiche Funktion wieder aufrufen.
Nun inOrder(r->left);
Anruf inOrder(struct node* r);
wieder mit null
als Parameter r
auf diesen Aufruf. Da übergeben Sie r->left
, die Null ist.
so, dieser Aufruf zu inorder
treffen wird return
if (r==NULL) return;
Wie es gibt wird es letzte Instanz inorder
Anruf wieder aufnehmen, die bei inOrder(r->left);
Anruf pausiert.
Dies ist möglich, weil, wenn Sie eine Funktion aufrufen innerhalb einer Funktion ist unterhält eine call stack.
Jetzt, nach der Wiederaufnahme wird die nächste Zeile
printf("%d ", r->value);
auszuführen, die Druckt den Wert in Ihrem linken unteren Knoten.
schließlich nennt es die letzte Zeile
inOrder(r->right);
die wiederum die Ausführung der aktuellen Funktion werden angehalten und nach dem aktuellen Status der Funktion in Call-Stack Spar es wird die inorder
mit null wieder r->right
rufen die wieder zurückkehren von
if (r==NULL) return;
und schließlich wird es zur ursprünglichen Ausführung inorder
zurückkommen und wieder aufnehmen und da es keine Anweisung links ist es diezurückMethode, wenn Sie von dort aufgerufen und fortsetzen, was in main übrig blieb.
Also, Ihre Antwort ist es wird nur den Wert in der untersten linken Knoten gedruckt.
Wissen Sie, was ein Funktionsaufruf-Stack ist? – StoryTeller
@StoryTeller Ich denke nicht, dass eine Callstack-Vorstellung erforderlich ist, um dies zu verstehen, nur die grundlegende Semantik von Funktionsaufrufen und die Return-Anweisung –
Rekursive Funktionen funktionieren genau wie alle anderen Funktionen. Ich denke, Sie könnten Rekursion als eine Art Schleife betrachten, aber es ist ein normaler Funktionsaufruf. – molbdnilo