假设每个对象都具有以下形式:(键,优先级),即(0,3),(5,7)。 假设您有两个数字,x和y。 您将使用什么数据结构来返回键在x和y之间的最高优先级对象? 我认为优先级队列可以是一个很好的解决方案,但我不知道如何修改它以返回给定范围内的最高优先级对象。
答案 0 :(得分:3)
从二叉搜索树开始,向每个节点添加两个字段:优先级和(指向)子树中最高优先级节点(有关如何执行此增强的更多信息,请参阅CLRS第14章)。
现在,要进行范围查询,请正常启动搜索,直到当前节点的键位于范围内。检查该节点,并使用以下过程的对称变体来标识包含范围中最高优先级节点的O(log n)候选,即当前节点的左右子树。以下过程适用于左子树。
如果根位于范围内,请将其视为最高优先级,并将其右侧子树中的最高优先级节点(缓存在节点中)视为最高优先级。继续使用左子树。如果根不在范围内,请继续使用正确的子树。
答案 1 :(得分:2)