如何检查二叉搜索树是否完美平衡?

时间:2019-04-29 13:58:14

标签: java data-structures binary-search-tree computer-science

我有此作业问题,除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 个答案:

答案 0 :(得分:4)

在第一种方法的最后一行,您可能想要这样做:

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

代替

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

在您的代码中,您忽略了子树上isPerfectlyBalanced的结果,并始终返回false。