我有一个树数据结构,其中每个节点可以有任意数量的子节点,树可以是任何高度。获取树中所有叶节点的最佳方法是什么?是否有可能做得更好,而不仅仅是遍历树中的每个路径,直到我到达叶节点?
实际上,树的最大深度通常为5左右,树中的每个节点都有大约10个孩子。
我对其他类型的数据结构或特殊树开放,这将使叶节点特别优化。
我正在使用javascript,但实际上只是寻找一般建议,任何语言等。
谢谢!
答案 0 :(得分:1)
内存布局对于最佳检索至关重要,因此子列表应该是连续的而不是链表,节点应该按照检索顺序放在彼此之后。
树的静态越多,布局就越好。
一体化布局
所有在一个阵列中完全订购
临
N
两个数组布局
内部节点指向叶子
专业
N
数组数组(动态大小,向量的C ++向量)
答案 1 :(得分:0)
查找树的叶子是O(n)
,这对于树来说是最佳的,因为您必须查看O(n)
个位置以检索所有n
个东西,以及沿着分支节点方式。常量开销是分支节点。
如果我们增加分支因子,例如让每个分支有32个子而不是2个,我们显着减少了开销节点的数量,这可能使遍历更快。
如果我们跳过分支,我们不会在该分支中包含值,所以我们必须查看所有分支。