我正在尝试将多个已排序的列表合并到一个树集中。。然后我考虑在树集上应用二进制搜索算法,以O(logn)的时间复杂度检索元素。。
下面是我的代码,我在其中一个方法中传递列表列表,并将它们组合成TreeSet
以避免重复...所有列表中的输入
排序-
private TreeSet<Integer> tree = new TreeSet<Integer>();
public void mergeMultipleLists(final List<List<Integer>> inputs) {
tree = new TreeSet<Integer>();
for (List<Integer> input : inputs) {
for(Integer ii : input) {
tree.add(ii);
}
}
}
public List<Integer> getItem(final Integer x) {
// extract elements from TreeSet in O(log n)
}
或者,与我目前使用的数据结构相比,我更适合使用另一种数据结构?
更新代码:-
私有树集树=新树集();
public SearchItem(final List<List<Integer>> inputs) {
tree = new TreeSet<Integer>();
for (List<Integer> input : inputs) {
tree.addAll(input);
}
}
public Integer getItem(final Integer x) {
if(tree.contains(x)) {
return x;
} else {
// now how do I extract next largest
// element from it if x is not present
}
}
TreeSet本质上是一个排序集,通过TreeMap使用红树黑树作为后盾
基本上是:树集。加(E)-
因为它已经是一个二进制的排序树结构,任何“获取”或“包含”都将导致O(log n)操作。
你的代码和你的问题不一致。
您正在压平一个列表
但是接下来的方法是“给定这个整数,给我一个
列表
所以,让我按顺序回答你的问题:
当然/是Y
- 没有。你误解了集合(你不能通过设计提取)如果你能做Set.contains(e),那么你就有了元素,不需要提取任何东西
如果您需要执行设置提取之类的操作,请使用TreeMap或将您的设置转换回列表,并执行
myList.get(Collections.binarySearch(myElement));
您可以使用TreeSet.floor(),根据文档
返回此集合中小于或等于给定元素的最大元素,如果没有此类元素,则返回null。
TreeSet
由一个NavigableMap
、一个TreeMap
支持。在TreeSet
上调用contains()
将委托给TreeMap。containsKey()
,这是一个二进制搜索实现。
您可以使用TreeSet检查集合中是否包含对象。contains()
,但必须先拥有对象。如果您希望能够查找和检索对象,那么Map
实现会更好。
一个痛苦而愚蠢的问题,我几乎羞于不敢问。在过去的4个小时里,我一直在寻找,测试了不同的算法,在纸上尝试了不少,但仍然无法正常工作。 我将为您提供项目实现的详细信息,但基本问题是:“如何处理在预排序二叉树中插入节点。 通过预排序BST,我的意思是所有节点都应该以这样的方式插入,即使用预排序遍历(例如用于打印)遍历树时,应该按升序打印节点。 我只需要一个简单的算法。我尝试了这里给出的一个简单的插入算法
我正在用python开发一个二叉查找树。但是我的检索方法并不像我希望的那样工作。只有当我想检索根节点时,它才返回正确的值,对于所有其他节点,它都不返回任何值。 下面是我的节点类的代码: 我的二叉树代码: 所以Bintree中的最后一个方法为除Root之外的所有值返回Not,但它应该返回节点的值。 填充树:
给定二叉查找树(BST)和整数val的根。 在BST中找到该节点的值等于val的节点,并返回以该节点为根的子树。如果这样的节点不存在,则返回null。 为什么'ans=root'不起作用??
我想实现一种将排序数组插入二叉搜索树的算法,但我不希望最终得到一棵只向一侧生长的树。 你有什么想法吗? 谢谢你。
问题内容: 我被要求对数组进行排序和搜索。对数组进行排序很简单,我的代码也起作用了,但是每当我尝试调用二进制搜索方法时,它就可以对数组中的第一个元素起作用,但是结果是“ -1” 我的完整代码如下: 问题答案: 您搞砸了二进制搜索间隔
我正在尝试实现一个二叉查找树,但是“搜索”函数对于除了根之外的每个条目都返回了错误的值。 该函数应返回其值与键参数匹配的节点的地址,如果节点不存在,则返回 NULL。 当我运行代码时,我得到以下内容: 我知道每个节点的“左”和“右”指针链接正确,因为“delAll”函数成功删除了所有节点。 将“cout”语句添加到“search”函数表明该函数似乎返回了正确的地址。为什么从主主调用时会打印错误的地