计算树结构中树叶的索引

Compute index for leafs in a tree structure

本文关键字:索引 结构 计算      更新时间:2023-10-16

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

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

我的想法类似于说根节点是索引0,然后左:1,左:左:2,左:右:左:3,左:左侧:右侧:4,左:右侧:左侧:5,左:右边:右侧:6,右:7,右:左侧:8,例如

因此,给定一个叶节点,我如何才能最聪明地计算索引。

如果给出0.1…L的叶索引更明智,则也可以接受其他解决方案,其中L是叶的数量。

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

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

通过这种方式,查找父级只需:(index-1)/2。找到两个孩子就是2*index2*index + 1

在我的树结构(四叉树和八叉树)中,我使用每个节点索引的二进制表示。例如每个维度的32位(对于最大32电平)。因此,我可以通过公式来计算一片叶子的完整索引(或路径)

path.x=(无符号int)(leaf.position.x*pow(2,32));

leaf.position.x必须在0…1 的范围内

这种方法的唯一限制(我认为)是,您存储的数据必须在特定的范围内,这样您就可以根据您的区域大小进行划分。如果这对您的用例来说是可能的,请访问简单有效的导线测量方法四叉树和八叉树