Ich arbeite durch das Buch "Cracking the Coding Interview" von Gayle McDowell und stieß auf einen interessanten rekursiven Algorithmus, der die Werte aller Knoten in einem ausgeglichenen binären Suchbaum summiert.Laufzeit des folgenden rekursiven Algorithmus?
int sum(Node node) {
if (node == null) {
return 0;
}
return sum(node.left) + node.value + sum(node.right);
}
Jetzt Gayle sagt die Laufzeit O (N) ist, die ich verwirrend finden, wie ich sehe nicht, wie dieser Algorithmus jemals enden wird. Für einen bestimmten Knoten, wenn node.left im ersten Aufruf zur Summe übergeben wird und dann node.right im zweiten Aufruf zur Summe weitergeleitet wird, berechnet der Algorithmus nicht die Summe (Knoten) zum zweiten Mal? Würde dieser Prozess nicht für immer weitergehen? Ich bin immer noch neu in rekursiven Algorithmen, so dass es vielleicht noch nicht sehr intuitiv ist.
Prost!
'node.left' ist das linke Kind von' node', 'node.right' ist das richtige Kind. 'sum (node)' berechnet rekursiv die Summe des linken Kinds, dann des rechten Kinds und addiert sie zusammen (mit 'node's Wert) –