我正在写一个四叉树的移除方法。
现在,当您从节点中删除一个项目时,您需要检查它的兄弟节点,看看是否需要折叠节点并将它们合并为一个。
为了检查兄弟节点,我应该存储指向父节点的指针,还是有一种递归的更好的方法?
谢谢
对于在四叉树中移除,您基本上需要做以下操作:
- 找到对象的叶子,然后将其从列表(包含叶子的节点)中删除
- 检查叶子的删除是否使节点为空,如果是,则删除节点本身。
- 检查周围的节点是否也为空,如果是,通过"unsubdivided"将该节点折叠到父节点中(这可能会变得递归棘手)。诀窍是检查相邻节点中是否有东西。如果没有,你可以把整个象限扔掉,然后往上一层。递归地执行此操作将使树折叠回具有叶节点的相邻节点。
在第一步之后,您基本上完成了。如果您想节省内存并保持树的效率,那么您应该执行步骤2和3。
是的,您应该保留父节点引用以使反向遍历更有效。