【问题标题】:build a non binary tree, every node has large number of children in c++ [closed]构建一棵非二叉树,每个节点在c ++中都有大量子节点[关闭]
【发布时间】:2018-11-30 13:36:52
【问题描述】:

我需要用 c++ 构建一棵树,其中第一级有 m 个节点,m 个节点的每个节点都有 m-1 个子节点,所以第二级将有 m*(m-1) 个节点,第三级level 将有 m*(m-2) 个节点,依此类推。 (类似于所附的img)。 我如何声明每个子节点并为每个级别的每个节点添加大量子节点?我可以递归地做吗? 我们可以首先假设 m 是一个小数,m

我知道这对内存来说是非常大的负载,但是当我们在每个级别进行更深入时,根据添加新孩子之前应用的某些条件,孩子的数量会减少,所以主要只有 1 级和 2 级会添加完整的节点数。

tree

【问题讨论】:

  • 您考虑过使用std::vector吗?
  • 不清楚问题到底是什么,如果您知道如何添加 2,您几乎拥有添加 n 所需的一切。而不是leftright 指针可能是子节点指针的向量。你对内存的担忧有点奇怪,因为如果你在二叉树或非二叉树中有 100 万个节点,内存占用几乎相同
  • 你的树将有 N = m*(m-1)*..*2.1 个元素,而 m = 13,N = 6.227.020.800 个元素,m = 20 会导致很大的内存问题你。
  • 在互联网上搜索“C++ B-Tree”或“C++ B*Tree”。或“C++ 树页面”。您的数据结构在数据结构教科书中,因此您应该能够在网络上找到示例。

标签: c++ tree structure


【解决方案1】:

如果您在编译时知道大小,请使用递归模板:

#include <array>

template <int N>
class Foo
{
    std::array<Foo<N-1>, N> children;
};

template<>
class Foo<0>
{
};

int main()
{
    Foo<4> bar;
}

否则,使用向量:

#include <vector>

class Foo
{
    std::vector<Foo> children;
    public:
        Foo(int N)
        :children(std::max(0, N-1), Foo(N-1)){} // Infinite recursion here, you will need to handle this case
};

int main()
{
    Foo bar(4);
}

【讨论】:

    猜你喜欢
    • 2018-12-17
    • 1970-01-01
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    相关资源
    最近更新 更多