• Source
    1. import java.util.*;
    2. import java.lang.*;
    3.  
    4. class Main
    5. {
    6. public static void countLevels(Integer tree[], int index, int levels[], int level)
    7. {
    8. if ( index >= tree.length )
    9. return;
    10.  
    11. Integer node = tree[index];
    12.  
    13. if ( node != null )
    14. levels[level] += 1;
    15.  
    16. countLevels(tree, leftChild(index), levels, level+1);
    17. countLevels(tree, rightChild(index), levels, level+1);
    18. }
    19.  
    20. public static int largestLevel(Integer tree[])
    21. {
    22. int levels[] = new int[numLevels(tree.length)];
    23. for (int x = 0; x < levels.length; x++)
    24. levels[x] = 0;
    25.  
    26. countLevels(tree, 0, levels, 0);
    27.  
    28. int max = -1;
    29. int maxLevel = -1;
    30.  
    31. for (int level = 0; level < levels.length; level++)
    32. {
    33. if ( max < levels[level] )
    34. {
    35. max = levels[level];
    36. maxLevel = level;
    37. }
    38. }
    39.  
    40. return maxLevel;
    41. }
    42.  
    43. public static int numLevels(int nodeCount)
    44. {
    45. int log2 = (int) (Math.log(nodeCount+1)/Math.log(2));
    46. return log2;
    47. }
    48.  
    49. public static int leftChild(int index)
    50. { return index*2 + 1; }
    51.  
    52. public static int rightChild(int index)
    53. { return index*2 + 2; }
    54.  
    55. public static void main (String[] args) throws java.lang.Exception
    56. {
    57. /* Given a binary tree return the level with maximum number of nodes
    58.   0: 1
    59.   : / \
    60.   1: 2 3
    61.   : /\ /\
    62.   2: 4 5 6 7
    63.   : / \
    64.   3: 8 9
    65.  
    66.   returns '2'
    67.   */
    68.  
    69. Integer e = null;
    70.  
    71. System.out.println(
    72. largestLevel(new Integer[] {
    73. 1,
    74. 2, 3,
    75. 4, 5, 6, 7,
    76. 8, e, e, e, e, e, e, 9 }
    77. ));
    78. }
    79. }