【问题标题】:Width of a k-ary treek-ary树的宽度
【发布时间】:2013-06-10 22:29:22
【问题描述】:

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

【问题讨论】:

  • 您好我正在尝试使用 Java 实现其输出为相邻矩阵形式的 k 数组树。输入参数是 k = 每个节点的子节点数和 d = 树的深度。给定这个参数,我将生成树的相邻矩阵。我看到了github,无法关注。请您指导我实现这个吗?

标签: c++ algorithm data-structures tree


【解决方案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);
    }
}

希望这会有所帮助!

【讨论】:

  • 正确的解决方案!谢谢!我使用的是数组而不是 unordered_map,因为我们不能使用它(因为我们正在研究这种数据结构;)
  • 这就是我所做的。 pastebin.com/7fU7JBtN 它有效! ;) 再次感谢,非常有帮助。
  • 您好我正在尝试使用 Java 实现其输出为相邻矩阵形式的 k 数组树。输入参数是 k = 每个节点的子节点数和 d = 树的深度。给定这个参数,我将生成树的相邻矩阵。我看到了github,无法关注。请您指导我实现这个吗?
【解决方案2】:

最大数应为 k^depth,其中根为 depth==0。您是指使用的最大值吗?

【讨论】:

  • 我认为这真的取决于树的形状 - 如果树不完整,那么中间层可能比底层更完整。
猜你喜欢
  • 1970-01-01
  • 2012-01-05
  • 2013-02-20
  • 1970-01-01
  • 2012-03-30
  • 1970-01-01
  • 1970-01-01
  • 2014-01-10
  • 1970-01-01
相关资源
最近更新 更多