正确实现二叉树的高度

时间:2015-06-05 00:03:36

标签: java binary-search-tree

你好我们正在练习在树上学习。我实现了函数来获得树的高度。以下是我的代码:

public int getHeight(){
    return getHeight(root);
}
private int getHeight(BinaryNode<T> root){
    if(root == null){
        return 0;
    }
    else{
        return 1+Math.max(getHeight(root.getLeftChild()), getHeight(root.getRightChild()));
    }
}

但是我注意到这会计算节点数而不是边数。我注意到互联网上有很多实现使用类似的方法来获得高度。现在当我将返回值从0更改为-1时,它返回边数。 以下是计算边数的方法:

public int getHeight(){
    return getHeight(root);
}
private int getHeight(BinaryNode<T> root){
    if(root == null){
        return -1;
    }
    else{
        return 1+Math.max(getHeight(root.getLeftChild()), getHeight(root.getRightChild()));
    }
}

现在,如果树中有一个节点,则第一种方法将高度返回为1.这不是一种错误的方法吗?不要把它的高度恢复为0吗?但是如果存在单个节点,则第二种方法返回0。我的问题是高度不应该是边数而不是树中节点数。

0 个答案:

没有答案