【问题标题】:Quadtree Removal四叉树去除
【发布时间】:2011-10-07 22:27:33
【问题描述】:

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

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

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

谢谢

【问题讨论】:

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

标签: java quadtree


【解决方案1】:

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

  1. 找到对象的叶子,然后从列表中删除它(包含叶子的节点)
  2. 检查叶子的删除是否使节点为空,如果是,则删除节点本身。
  3. 检查周围的节点是否也为空,如果是,则通过“取消细分”将此节点折叠到父节点中(递归地执行此操作可能会很棘手)。诀窍是检查相邻节点是否有任何东西。如果没有,您可以安全地将整个象限扔掉并提升一个级别。递归执行此操作会将树折叠到存在具有叶子的相邻节点的位置。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-09
    • 1970-01-01
    • 2013-05-12
    • 2014-06-14
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多