Таким образом, я работаю с деревьями двоичного поиска, и один из методов, с которыми я столкнулся, - это метод, называемый stickCt, который в основном рассчитывает количество палочек в дереве и возвращает число. Для того, чтобы быть палкой, он должен иметь нулевой и ненулевой дочерний элемент, чтобы он считался палкой, у меня есть мой код и он соответствует, но я все равно получаю 0 в качестве возвращаемого значения, я не знаю, что не так Я пробовал перемещать вещи вокруг, но ничто, кажется, не помогает, будет очень благодарна. Так как я делаю это рекурсивно, вот код:
// The number of nodes with exactly one non-null child
//driver
public int stickCt () {
return stickCt(root);
}
private static int stickCt (IntNode T) {
int num;
//easiest case
if (T == null) {
num = 0;
}
//if the left child is null and the right child is not null
else if (T.getLeft() == null && T.getRight() != null) {
num = stickCt(T.getRight()) + 1;
}
//if right child is null and left side is not null
else if (T.getRight() == null && T.getLeft() != null) {
num = stickCt(T.getLeft()) + 1;
}
//recursive part
else {
num = stickCt(T.getLeft()) + stickCt(T.getRight());
}
return num;
}
Проблема в том, что вы должны вернуть сумму подсчета палочек на каждом узле, но вместо этого вы просто возвращаете текущее значение палочек. Вы можете переписать метод таким образом:
private static boolean onlyOneIsNull(IntNode node1, IntNode node2) {
return (node1 != null && node2 == null)
|| (node1 == null && node2 != null);
}
private static int stickCt(IntNode T) {
//easiest case
if(T==null) {
return 0;
}
//evaluating if I'm a stick
int num = 0;
if (onlyOneIsNull(T.getLeft(), T.getRight())) {
num = 1;
}
//stickCt already takes care of null nodes, no need to add a null validation for nodes
//need to return the number of sticks from left node and right node
return stickCt(T.getLeft()) + stickCt(T.getRight()) + num;
}