计算树结构中叶子的索引

时间:2012-03-10 18:25:02

标签: c++ data-structures binary-tree

给定树(二进制)结构,深度为N.是否可以为映射叶节点计算一些查找索引。

如果不是叶子,每个节点都知道它的父节点及其子节点(左和右)。

我的想法就像是说rootnode是索引0,然后是左:1,左:左:2,左:左:左:3,左:左:右:4,左:右:左:5,左:右:右:6,右:7,右:左:8例如

因此,给定一个叶节点,我如何计算最智能的索引。

其他解决方案也被接受,如果它更聪明地给出叶子索引从0,1 ... L,其中L是叶子的数量。

2 个答案:

答案 0 :(得分:1)

如果您希望在数组中表示树,最简单的方法是一次采用树的一层。

      0
     / \
    /   \
   1     2       [0, 1, 2, 3, 4, 5, 6]
  / \   / \
 3   4 5   6

这样,找到父母就是:(index-1)/2。找到这两个孩子只是2*index2*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