Похоже, вы забыли включить root в какой-то момент.
Простая проверка исправности заключается в том, что вы помните, что у вас есть 4 случая: Случай 1: узел не существует, поэтому посчитайте = 0 Случай 2: у узла нет дочерних элементов, поэтому count = 1 Случай 3: у узла есть один дочерний элемент, поэтому count = 2 (потому что вы сказали, что мы включаем root) Случай 4: у узла есть два дочерних элемента, поэтому count = 3.
Ваш код ни в коем случае не возвращает 3, потому что вы забыли включить root.
Кроме того, этот метод всегда будет иметь максимум 3, поэтому вы можете захотеть пересмотреть метод так, чтобы он вызывал себя рекурсивно для каждого дочернего узла, если вы хотите знать количество узлов для всего дерева.
Примечание: вы проверяете левый и правый узлы дважды. Вы могли бы упростить свой код, чтобы он выглядел примерно так, поскольку нам все равно, какой узел считается первым:
private int getNonNullSC(int a) {
int count = 0;
if (a+a+2 < values.length) {
if (values[a] == null)
{
count = count + 1; // Or simplified: count++; which means count is now 1
}
if (values[a+a+1] != null) {
count++; // which means counts is now 2
}
if (values[a+a+2] != null) {
count++; // which means count is now 3 or 2 if there was no left node
}
}
return count;
}