我正在尝试构建一个树,其中每个节点都可以有一个未指定数量的子节点。该树在实践中将拥有超过一百万个节点。
我设法构建了树,但是当我用几千个节点填充树时,由于完整堆我遇到了内存错误。这是因为我试图将每个节点的子节点存储在Dictionary数据结构(或任何数据结构)中。因此,在运行时我创建了数千个这样的数据结构,因为每个节点可以有一个未指定数量的子节点,并且每个节点的子节点都将存储在这个数据结构中。
还有另一种方法吗?我不能简单地使用变量来存储子节点的引用,因为每个节点可能有一个未指定数量的子节点。那么,它不像二叉树,我可以有2个变量分别跟踪左孩子和右孩子。
请不要另外建议这样做的方法。我有理由需要创建这棵树,不幸的是我不能这样做。
谢谢!
答案 0 :(得分:2)
您的节点中有多少是“叶子”节点?当你第一次拥有一个孩子时,也许只创建数据结构来存储孩子,否则保持一个空引用。
除非您需要将孩子作为地图查找,否则我会使用List<T>
(使用适当的容量初始化)代替Dictionary<,>
。听起来你可能有比你解释的要求更多的要求,这很难说。
我很惊讶你在几千个节点之后失败了 - 你应该能够在遇到问题之前创建大量的对象。
我还建议,如果您认为最终会占用大量内存,请确保您使用的是64位计算机,并确保您的应用程序本身设置为64位。 (这可能只是类库的一个薄包装,只要类库设置为64位或AnyCPU就可以了。)