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

构建一个非二叉树,每个节点在c+中都有大量的子节点+; 需要用C++构建树,其中第一级有M个节点,M节点的每个节点都有M-1个子节点,所以第二级将有M*(M-1)节点,第三级将有M*(M-2)节点等。(与随附的img类似)。 如何声明每个子节点并为每个级别的每个节点添加如此大量的子节点?我可以递归地做吗? 首先,我们可以假设m是一个小数字,m,c++,tree,structure,C++,Tree,Structure,如果您知道编译时的大小,请使用递归模板: #include <array> template <int N> class Foo { std::array<Foo<N-1>, N> children; }; template<> class Foo<0> { }; int main() { Foo<4> bar; } #包括 模板 福班 { std::数组子元素; }; 模板 福班 { }

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

#include <array>

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

template<>
class Foo<0>
{
};

int main()
{
    Foo<4> bar;
}
#包括
模板
福班
{
std::数组子元素;
};
模板
福班
{
};
int main()
{
富吧;
}
否则,请使用向量:

#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);
}
#包括
福班
{
性病媒儿童;
公众:
Foo(内部网络)
:children(std::max(0,N-1),Foo(N-1)){}//无限递归在这里,您需要处理这种情况
};
int main()
{
富吧(4);
}

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