在二进制搜索树中查找每个深度的节点数量

时间:2016-10-04 12:56:16

标签: java binary-tree binary-search-tree nodes

我想知道如何找到每个深度的节点数量?

我有一个看起来像这样的最大深度代码

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);
        }
    }
}

我想要的是一个可以计算每个深度级别的节点数量的代码。

1 个答案:

答案 0 :(得分:-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);
    }
}