【问题标题】:Range tree construction范围树构建
【发布时间】:2012-09-09 07:24:55
【问题描述】:

让我们考虑下图

这是一个所谓的范围树。我不明白一件事,它看起来类似于二叉搜索树,所以如果我们要插入元素,我们可以使用与二叉搜索树插入相同的过程。那么区别是什么呢?

我已经阅读了一个教程,并猜测它是 kd 树、查询搜索树(如几何点搜索等)的变体,但如何构建它?像二叉搜索树还是需要额外的参数?可能是这样的

struct  range
{
int lowerbound;
int upperbound,
int element;

};

在插入过程中我们必须检查

 if(element>lowerbound && element <upperbound) 
then insert node

请帮助我正确理解如何构建范围树。

【问题讨论】:

    标签: c++ algorithm tree interval-tree


    【解决方案1】:

    在二叉搜索树中,当您插入一个值时,您会插入一个新节点。

    范围搜索树更类似于binary index tree。这两种数据结构具有固定的结构。当您在给定范围内添加/减去一个点时,您会更新节点中的值,但不会引入新节点。

    此结构的构造与KD-tree 的构造非常相似:根据给定的点,您可以选择最合适的拆分点。

    当您学习新的数据结构时,请始终考虑支持的操作 - 这将帮助您更快地理解结构。在您的情况下,它可以帮助您区分二叉搜索树和范围树。

    【讨论】:

    • 但是一开始当我有空树时,我是否创建了新节点?我的意思是从起始位置
    • @AleksiBeriashvili 在使用范围树解决的任务中,您最初会得到一组用于构建树的间隔。因此,您实际上从 n 个节点而不是空树开始。在初始构造之后,您只需更改节点的值,但不要添加/删除节点。
    • 据我了解,我只是从初始间隔构造二叉树(如二叉搜索树),然后只更新值吗?确定搜索某些特定值的更新操作类似于二叉搜索方法吗?
    • @AleksiBeriashvili 我真的认为您不了解数据结构支持的操作。请考虑这个 pdf,我认为它会有所帮助:people.csail.mit.edu/radu/6854proj.pdf
    • @BorisStrandjev:本文明确指出,您可以添加或删除间隔,我想说如果您这样做,树结构会改变......不是吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 2019-11-24
    • 2011-03-23
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多