首页 > 解决方案 > .NET 等效于 Java 的 TreeSet.floor 和 TreeSet.ceiling

问题描述

例如,有一个包含一系列值的二叉搜索树。在添加新值之前,我需要检查它是否已经包含它“几乎重复”。我有 Java 解决方案,它简单地执行地板和天花板以及完成这项工作的进一步条件。

JAVA : 给定 a TreeSetfloor()返回这个集合中小于或等于给定元素的最大元素;ceiling()返回此集合中大于或等于给定元素的最小元素

TreeSet<Long> set = new TreeSet<>();

long l = (long)1;  // anything
Long floor = set.floor(l);
Long ceil = set.ceiling(l);

C#:最接近的数据结构似乎是SortedSet<>. 任何人都可以建议获得输入值的下限和上限结果的最佳方法吗?

SortedSet<long> set = new SortedSet<long>();

标签: c#.netbinary-search-tree

解决方案


如前所述,上述不是答案,因为这是我们期望对数时间的树。Java 的地板和天花板方法是对数的。GetViewBetween 是对数的,Max 和 Min 也是,所以:

地板SortedSet<long>sortedSet.GetViewBetween(long.MinValue, num).Max

天花板SortedSet<long>sortedSet.GetViewBetween(num, long.MaxValue).Min


推荐阅读