给定树(二进制)结构,深度为N.是否可以为映射叶节点计算一些查找索引。
如果不是叶子,每个节点都知道它的父节点及其子节点(左和右)。
我的想法就像是说rootnode是索引0,然后是左:1,左:左:2,左:左:左:3,左:左:右:4,左:右:左:5,左:右:右:6,右:7,右:左:8例如
因此,给定一个叶节点,我如何计算最智能的索引。
其他解决方案也被接受,如果它更聪明地给出叶子索引从0,1 ... L,其中L是叶子的数量。
答案 0 :(得分:1)
如果您希望在数组中表示树,最简单的方法是一次采用树的一层。
0
/ \
/ \
1 2 [0, 1, 2, 3, 4, 5, 6]
/ \ / \
3 4 5 6
这样,找到父母就是:(index-1)/2
。找到这两个孩子只是2*index
和2*index + 1
。
答案 1 :(得分:0)
在我的树结构(四叉树和八叉树)中,我使用每个节点的索引的二进制表示。例如每个维度的32位(最大32级)。 所以我可以通过公式
计算叶子的完整索引(或路径)path.x =(unsigned int)(leaf.position.x * pow(2,32));
leaf.position.x musst的范围是0 ... 1
此方法的唯一约束(我认为)是您存储的数据位于特定范围内,因此您可以根据区域大小来划分它。 如果您的用例有可能,请阅读更多内容 Simple and Efficient Traversal Methods for Quadtrees and Octrees