Является аргументом для функции, которая является ссылкой на обработанную переменную static
в рекурсивной функции? Ниже приведена функция для нахождения k-го наименьшего корня в BST.Передача переменной по ссылке на возвращаемую функцию
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.
}
Функция kthsmallest
возвращает значение наименьшего -го узла.
определение Node:
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
}
Мой вопрос, почему k
передается по ссылке.
Потому что он изменен в функции? И использовал * после * рекурсивный вызов. –
@Someprogrammerdude Он не используется в функции, которая называется так, как вы можете видеть. – Gyanshu
Нет, но рекурсивный вызов может изменить его, а затем он используется внутри функции 'findNode'. И «findNode» можно было бы вызвать из других мест, а может быть? Я предлагаю вам выполнить код в отладчике, вступая в рекурсивные вызовы, чтобы увидеть, что на самом деле происходит. –