检查二叉搜索树是否平衡的方法

时间:2014-11-18 02:41:23

标签: java binary-search-tree

我正在尝试实现一种方法,该方法检查给定的二进制搜索树是否在给定的容差范围内平衡。这是我到目前为止的代码。我没有比这更进一步的想法。无论谁回答这个问题,你能否提供一个解释?这对你非常有帮助。

平衡树是平衡的,如果树中的每个节点,每个节点子节点的深度最多只有一些容差。给定一个BinaryTreeNode和一个容差的链接,如果root是平衡的,则返回true,否则返回false。

容差是决定树是否平衡的最大容差

如果树是平衡的,则返回true,否则返回false。 如果root是== null,我希望它抛出nullpointerexception 如果公差<&lt;而且是非法的。 0

我的代码的问题是该行

if(computeHeight(root) == -1){

类型computeHeight不适用于参数

我有一个getDepth()方法,它返回节点所在的级别

public <T> boolean isBalanced(BinaryTreeNode<T> root, int tolerance) {
    // TODO Auto-generated method stub

    if(root == null){
        throw new NullPointerException();
    }
    if(tolerance < 0){
        throw new IllegalArgumentException();
    }
    if(computeHeight(root) == -1){
        return false;
    }
    else{
        return true;
    }
}
public int computeHeight(BinaryTreeNode<T> root){
    if(root == null){
        return 0;
    }
    int leftHeight = computeHeight(root.getLeftChild());
    if(leftHeight == -1){
        return -1;
    }
    int rightHeight = computeHeight(root.getRightChild());
    if(rightHeight == -1){
        return -1;
    }
    int heightDifference = Math.abs(leftHeight - rightHeight);
    if(heightDifference > 1){
        return -1;
    }
    else{
        return Math.max(leftHeight, rightHeight) + 1;
    }
}

0 个答案:

没有答案