Ist ein Argument für eine Funktion, die eine Referenz auf die Variable static
in rekursive Funktion ist? Unten ist eine Funktion zum Finden der kleinsten Wurzel in einer BST.Übergeben einer Variablen durch Verweis auf eine wiederkehrende Funktion
int findNode(TreeNode* root, int &k) {
if(root == NULL)
return -1;
// We do an inorder traversal here.
int k1 = findNode(root->left, k);
if(k == 0) return k1; // left subtree has k or more elements.
k--;
if(k == 0) return root->val; // root is the kth element.
return findNode(root->right, k); // answer lies in the right node.
}
int kthsmallest(TreeNode* root, int k) {
return findNode(root, k); // Call another function to pass k by reference.
}
Die Funktion kthsmallest
der k-ten kleinsten Knotens Wert zurückgibt.
Knoten Definition:
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
}
Meine Frage ist, warum k
durch Referenz übergeben wird.
Weil es in der Funktion geändert wird? Und benutzt * nach * dem rekursiven Aufruf. –
@Someprogrammerdude Es wird nicht in der Funktion verwendet, die es aufgerufen hat, wie Sie sehen können. – Gyanshu
Nein, aber der rekursive Aufruf kann ihn modifizieren, und dann wird er innerhalb der 'findNode' -Funktion verwendet. Und der 'findNode' könnte auch von anderen Orten aus aufgerufen werden? Ich schlage vor, dass Sie in einem Debugger durch den Code gehen und in die rekursiven Aufrufe einsteigen, um zu sehen, was wirklich passiert. –