Algorithm 实现任意叶数的有根树

Algorithm 实现任意叶数的有根树,algorithm,tree,Algorithm,Tree,假设这个数字是在运行时给出的,例如20。树也不一定是满的。不幸的是,减少树叶的数量似乎也不是一个选择,因为树木的结构保留了一些物理意义 对于具有多个子节点的节点,内存效率似乎是一个大问题。如果必须保留/分配子指针数组的内存,则可能会保留大量未使用的内存;如果使用动态数组/向量来保存指针,则重新分配时速度会很慢 因此,我的问题是,是否有一种数据结构可以在不使用具有大量叶子的树的情况下保持相对的父子关系?通常有一个用于子指针的动态数组,并且鉴于您无论如何都必须分配一个节点,“当重新分配发生时变慢”断

假设这个数字是在运行时给出的,例如20。树也不一定是满的。不幸的是,减少树叶的数量似乎也不是一个选择,因为树木的结构保留了一些物理意义

对于具有多个子节点的节点,内存效率似乎是一个大问题。如果必须保留/分配子指针数组的内存,则可能会保留大量未使用的内存;如果使用动态数组/向量来保存指针,则重新分配时速度会很慢


因此,我的问题是,是否有一种数据结构可以在不使用具有大量叶子的树的情况下保持相对的父子关系?

通常有一个用于子指针的动态数组,并且鉴于您无论如何都必须分配一个节点,“当重新分配发生时变慢”断言并没有意义。您没有提到的其他注意事项可能会在某些情况下将该数组更改为侵入性链表;如果我们在分支已满时为向量保留足够大的空间,那么它会保留在分支不太可能已满时可能无法使用的内存;如果我们不这样做,那么如果我们将子对象添加到父对象,那么向量可能必须移动到另一个内存空间。如果添加子对象,那么向量必须移动到另一个内存空间。。。那又怎样?它可能很慢,并且会在内存中创建很多片段,想象一下一个10级的20进制树,其中每一个可能的节点都经过评估,添加/删除得尽可能快,但您已经花了时间分配所有的子节点。与此相比,父阵列分配的成本真的很大吗?