二叉搜索树的最大高度

时间:2018-11-24 12:39:10

标签: java

所以我需要找到二叉树的最大高度,但是由于某种原因,下面提供的代码结果偏离了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

2 个答案:

答案 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