Как проверить, идеально ли сбалансировано бинарное дерево поиска? - PullRequest
0 голосов
/ 29 апреля 2019

У меня проблема с домашним заданием, и я выполнил все методы, кроме этого, isPerfectlyBalanced().

Все мои тесты пройдены, кроме одного, которое должно вернуть false, но вместо этого возвращает true. Я приложил свой текущий код и тест, который не проходит. Любое описание того, как это сделать, или даже дайте мне знать, где мой код неправильный, приветствуется!

private boolean isPerfectlyBalanced(Node node) {

    if (node == null) {
        return true;
    }

    if(size(node.left) == size(node.right)) {
        return true;
    }
    isPerfectlyBalanced(node.left);
    isPerfectlyBalanced(node.right);
    return false;

}


public boolean isPerfectlyBalancedS() {
    // TODO
    if (root == null) {
        return true;
    }
    return isPerfectlyBalanced(root);

}

Вот мой тест, который не проходит:

assertFalse(set.isPerfectlyBalancedS());

Спасибо!

Метод моего размера:

private int size(Node node){
    if (node == null){
        return 0;
    } else {
        return (size(node.left) + 1 + size(node.right));
    }
}
public int size() {
    // TODO
    return size(root);
}

1 Ответ

4 голосов
/ 29 апреля 2019

В последней строке первого метода вы, вероятно, захотите сделать это:

return (isPerfectlyBalanced(node.left) && isPerfectlyBalanced(node.right));

вместо

isPerfectlyBalanced(node.left);
isPerfectlyBalanced(node.right);
return false;

В своем коде вы отклоняете результат isPerfectlyBalanced на поддеревьях и всегда возвращаете false.

...