你好我们正在练习在树上学习。我实现了函数来获得树的高度。以下是我的代码:
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。我的问题是高度不应该是边数而不是树中节点数。