Quadtree Removal



我正在写一个四叉树的移除方法。

现在,当您从节点中删除一个项目时,您需要检查它的兄弟节点,看看是否需要折叠节点并将它们合并为一个。

为了检查兄弟节点,我应该存储指向父节点的指针,还是有一种递归的更好的方法?

谢谢

对于在四叉树中移除,您基本上需要做以下操作:

  1. 找到对象的叶子,然后将其从列表(包含叶子的节点)中删除
  2. 检查叶子的删除是否使节点为空,如果是,则删除节点本身。
  3. 检查周围的节点是否也为空,如果是,通过"unsubdivided"将该节点折叠到父节点中(这可能会变得递归棘手)。诀窍是检查相邻节点中是否有东西。如果没有,你可以把整个象限扔掉,然后往上一层。递归地执行此操作将使树折叠回具有叶节点的相邻节点。

在第一步之后,您基本上完成了。如果您想节省内存并保持树的效率,那么您应该执行步骤2和3。

是的,您应该保留父节点引用以使反向遍历更有效。

相关内容

  • 没有找到相关文章

最新更新