四叉树去除

时间:2011-10-07 22:27:34

标签: java quadtree

我正在为四叉树编写一个删除方法。

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

为了检查兄弟姐妹,我应该存储一个指向父节点的指针,还是有办法以递归和更好的方式做到这一点?

由于

1 个答案:

答案 0 :(得分:9)

要在四叉树中移除,您需要基本上执行以下操作:

  1. 找到对象的叶子,然后从该列表中删除它(包含叶子的节点)
  2. 检查叶子的移除是否将节点留空,如果是,则删除节点本身。
  3. 检查周围的节点是否也是空的,如果是,则通过“unsubdividing”将此节点折叠到父节点(这可能会递归难以做到)。诀窍是检查相邻节点中是否有任何内容。如果没有,你可以安全地将整个象限扔掉并提升一级。递归执行此操作会将树折叠回到存在叶子的相邻节点的位置。
  4. 在第1步之后,你基本上已经完成了。如果你想节省内存并保持树的效率,那么你应该做第2步和第3步。

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