【发布时间】:2015-04-14 12:10:44
【问题描述】:
我正在实施 Bentley-Ottmann 算法
找到线段交点的集合,
可惜有些东西我没看懂。
例如:
- 如何获取图像中分段 Sj 的邻居。
我对sweepLine状态使用了平衡二叉搜索树,但是我们将段存储在叶子中,在阅读了这个wikipedia article之后我没有找到这个操作的解释。
来自参考书(de Berg & al.: "Computational Geometry",生病,第 25 页):
假设我们在 T 中搜索紧邻扫描线上某个点 p 左侧的线段。 在每个内部节点 v 处,我们测试 p 是位于存储在 v 处的段的左侧还是右侧。 根据结果,我们下降到 v 的左子树或右子树, 最终变成一片叶子。 这片叶子或紧靠它左边的叶子存储了我们正在搜索的片段。
对于我的例子,如果我遵循这个,我将到达叶子 Sj,但我只知道左边的叶子,即 Sk,我怎样才能得到 Si?
编辑 我发现这个discussion 看起来像我的问题,不幸的是没有关于如何在这种数据结构中实现一些操作的答案。
操作是:
- 在这种数据结构中插入一个节点。
- 删除节点。
- 交换两个节点。
- 正在搜索邻居节点。
当我们也在内部节点中存储数据时,我知道如何在平衡二叉搜索树中实现这些操作,但是对于这种类型的 AVL,我不知道它是否是同一件事。
谢谢
【问题讨论】:
-
您的问题是如何在任意二叉树中找到叶子的(左)邻居?或者是为什么引用的算法返回“正确”结果的问题?
-
我的问题是如何在平衡二叉搜索树中找到节点的左右邻居,而不是任何二叉树,有一些标准算法可以找到前任和后继node ,但不知道是否适合扫线算法
-
在平衡的二叉搜索树中找到邻居与不(必然)平衡没有区别,更不用说在应用程序之间了。 (如果不是搜索树,我想要
predecessor和successor的定义。)
标签: algorithm data-structures tree computational-geometry avl-tree