所以我需要找到二叉树的最大高度,但是由于某种原因,下面提供的代码结果偏离了1。 例如,如果最大高度为3,则以下代码将给我2。 如果最大高度为4,则结果将为3。 我不确定为什么吗?计算最大高度时不考虑根,因此我将leftCounter和rightCounter设置为0。 有什么想法吗?
public int getMaxHeight(BST.TreeNode<E> n) {
if(n == null) {
return 0;
}
int leftCounter = 0;
int rightCounter = 0;
if(n.left != null) {
leftCounter = getMaxHeight(n.left) +1 ;
}
if(n.right != null) {
rightCounter = getMaxHeight(n.right) +1 ;
}
if(leftCounter > rightCounter) {
return leftCounter;
}
else
return rightCounter;
}
此二叉树的最大高度应为 3 : 因为元素5,9,11。根不计入最大值 高度。
15
_____|____
10 21
___|___ __|__
9 14 16 24
|__
25
答案 0 :(得分:3)
您的代码实际上返回了正确的值;只是您误解了树高的含义。高度是从根到叶的最长路径上 edges 的数量,而不是路径上 nodes 的数量。所以下面的树
3
_____|____
4 5
___|___ __|__
6 7 8 9
的高度为2,而不是3。您要查找的是树中级别的数量,而不是高度。
public int getNumberOfLevels(BST.TreeNode<E> n) {
if(n == null) return 0;
int left = getNumberOfLevels(n.left);
int right = getNumberOfLevels(n.right);
return 1 + Math.max(left, right);
}
答案 1 :(得分:0)
您可以通过1初始化leftCounter和RightCounter。原因是if(n == null)-> false
这意味着高度至少为1