2016-10-04 100 views
-2

即時通訊想知道如何找到每深度的節點數量?查找二叉搜索樹中每個深度的節點數量

我有一個最大深度的代碼看起來像這樣

int maxDepth(BinNode n) { 
    if (n == null) { 
     return (0); 
    } else { 
     // compute the depth of each subtree 
     int leftDepth = maxDepth(n.venstre); 
     int rightDepth = maxDepth(n.hoyre); 
     // use the larger one 
     if (leftDepth > rightDepth){ 
      return (leftDepth + 1); 
     } 
     else{ 
      return (rightDepth + 1); 
     } 
    } 
} 

什麼,我想要的是能計算節點的數量有每個深度級別的代碼。

+0

你試過了什麼? – talex

+1

StackOverflow不是代碼寫入服務。如果您遇到問題,可以使用您編寫的代碼尋求幫助。清楚問題是什麼:你期望發生什麼,以及發生了什麼。並將代碼發佈爲[mcve]。 –

回答

-2

我在大學課堂上有過這樣的任務。 Full Code 它將每個級別的計數保存在散列映射中,然後計算一些統計數據。

private int maxDepth; 
private int sum; 
private Map<Integer, Integer> map; 

public void statistik() { 
    maxDepth = 0; 
    sum = 0; 
    map = new HashMap<>(); 
    statistikR(root, 0); 

    System.out.println("max:" + maxDepth); 
    System.out.println("sum:" + sum); 
    double average = 0; 
    for (int key : map.keySet()) { 
     // key = level, value = count per level 
     average += (key * map.get(key)); 
    } 
    System.out.printf("avg: %.2f%n", (average/sum)); 

} 

private void statistikR(Node p, int depth) { 
    if (p != null) { 
     ++sum; 
     if (depth > maxDepth) 
      maxDepth = depth; 

     if (!map.containsKey(depth)) 
      map.put(depth, 0); 
     int countPerLevel = map.get(depth).intValue(); 
     map.put(depth, ++countPerLevel); 

     ++depth; 

     statistikR(p.left, depth); 
     statistikR(p.right, depth); 
    } 
} 
+0

我想我會使用'ArrayList '而不是地圖。無論如何,要麼工作正常。 –

+2

請不要通過回答他們來鼓勵懶惰的問題。 –