k-ary树的宽度

时间:2013-06-10 22:29:22

标签: c++ algorithm data-structures tree

我需要找到k-ary树的宽度,其中宽度是任何级别的最大节点数。我要用C ++做。我已经考虑过BFS的修改版但没有任何运气。关于如何做到这一点的任何想法?

2 个答案:

答案 0 :(得分:1)

一种选择是遍历树并跟踪节点深度。每次遇到节点时,都可以更新与该节点的深度相关联的计数器。完成后,您可以找到总值最高的深度,然后返回。

在伪代码中:

int treeWidth(Node* root) {
    unordered_map<int, int> levelFreqs;
    recFindDepths(root, levelFreqs, 0);

    int maxCount = -1;
    for (auto& keyValue: levelFreqs) {
        maxCount = max(maxCount, keyValue.second);
    }
    return maxCount;
}

void recFindDepths(Node* root, unordered_map<int, int>& levelFreqs,
                   int depth) {
    if (!root) return;

    levelFreqs[depth]++;
    for (each child) {
        recFindDepths(child, levelFreqs, depth + 1);
    }
}

希望这有帮助!

答案 1 :(得分:0)

最大数量应为k ^ depth,其中根为depth == 0。你的意思是使用的最大值?