Java 四叉树删除

Java 四叉树删除,java,quadtree,Java,Quadtree,我正在为四叉树编写一个删除方法 现在,当删除节点中的项目时,需要检查其同级节点,以查看是否需要折叠节点并将其合并为一个节点 为了检查兄弟节点,我应该存储一个指向父节点的指针,还是有一种方法可以递归地更好地执行此操作 感谢您在四叉树中删除,您基本上需要执行以下操作: 找到对象的叶,然后将其从该列表(包含叶的节点)中删除 检查移除叶是否会使节点为空,如果为空,则移除节点本身 检查周围的节点是否也是空的,如果是空的,则通过“取消分区”将该节点折叠到父节点中(这可能会变得非常棘手)。诀窍是只检查相邻节点

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

现在,当删除节点中的项目时,需要检查其同级节点,以查看是否需要折叠节点并将其合并为一个节点

为了检查兄弟节点,我应该存储一个指向父节点的指针,还是有一种方法可以递归地更好地执行此操作


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

  • 找到对象的叶,然后将其从该列表(包含叶的节点)中删除
  • 检查移除叶是否会使节点为空,如果为空,则移除节点本身
  • 检查周围的节点是否也是空的,如果是空的,则通过“取消分区”将该节点折叠到父节点中(这可能会变得非常棘手)。诀窍是只检查相邻节点中是否有任何内容。如果没有,你可以把整个象限都扔掉,再上一层楼。递归地执行此操作会将树折叠回具有叶子的相邻节点所在的位置
  • 在第一步之后,您基本上完成了。如果您想节省内存并保持树的效率,那么您应该执行步骤2和3


    是的,您应该保留一个父节点引用,以提高反向遍历的效率。

    我猜这是一个高度专业化的规程,所以这里可能没有多少有经验的人。这在很大程度上取决于您选择的数据结构。但我会注意到,您可能必须遍历树才能找到要删除的节点,因此您可以在遍历时传入父指针,而不是需要在每个节点中存储父指针。