我的程序包含二进制搜索树和单个链表。 每个操作都对两个数据结构进行。 我有问题: 1)链接两个数据结构,以使两个数据结构点的电流都为同一元素。 2)对节点进行排序 3)最后也是最困难的一个是在链接列表log(n)中获得搜索的性能,因为它在bst中。我不能拥有更多的复杂性。 我使用另一种数据结构的选择是无。 顺便说一句,我使用java作为编程语言。
答案 0 :(得分:0)
1)链接两个数据结构,以使两个数据结构点的电流都为同一个元素。
您可以创建共享元素的树和链接列表。我猜这就是你的意思。
2)对节点进行排序
您无法对树进行排序。树的节点是自然排序的,如果你在不同的比较器上对它们重新排序,树就不再有效了。
3)最后也是最困难的一个是在链接列表log(n)中获得搜索的性能,因为它在bst中。
您无法在O(logN)
中搜索无序列表。这在数学上是不可能的。您可以在O(logN)
中搜索有序数组(或数组列表),但这取决于能够索引O(1)
中的数组/列表...这是链表无法实现的。
但是......您可以同时实现既是树又是链表的混合数据结构。你会从一个看起来像这样的节点类型开始:
private class Node <T> {
private Node<T> next;
private Node<T> prev;
private Node<T> left;
private Node<T> right;
private T value;
...
}
然后使用left
和right
字段构建树,使用next
和prev
字段构建链接列表。
可以使用一个Comparator
对数据结构的列表方面进行排序,并且可以对数据结构的树方面进行排序
使用第二个Comparator
...允许O(logN)
根据第二个Comparator
的排序进行查找。
我不确定这是否符合您的要求(它们没有明确说明),但它相当接近。