Теория состоит в том, что общее количество узлов на заданной глубине (скажем, глубина = 5) совпадает с суммой узлов глубины = 4, подсчитанной от левого и правого дочерних элементов. (потому что переход к ребенку уже вводит глубину 1).
Итак, давайте найдем количество узлов на глубине 4 у левого ребенка:
numNodesHeightK(root->left, k-1)
и количество узлов на 4-й глубине у правого ребенка:
numNodesHeightK(root->right, k-1)
и сложите их вместе, чтобы получить ответ для получения количества узлов глубины 5 от нашего текущего узла.
Одно это не решает проблему, оно просто разбивает ее на две более простые, более мелкие части. Проблема не будет полностью решена до тех пор, пока вы не запросите количество узлов на глубине 0, которое, очевидно, равно 1. Это реализовано в базовом случае функции :
if(k == 0) return 1; //if k = 0, then the root is the only node to return
И, наконец, вы используете термины Высота и Глубина взаимозаменяемо, что вводит в заблуждение, если вы пытаетесь говорить о «спуске» или «поднятии» дерева. Выберите одно соглашение и придерживайтесь его.