如果我们在排序的循环双链表中有我们的元素,那么操作的顺序(insert delete Max Min successor predecessor)与二叉搜索树相同甚至更好。那么我们为什么要使用它们呢?
是因为数据结构作者希望通过一些简单的例子让读者熟悉树的一般概念作为数据结构吗?
我已经阅读了一些相同的问题,但问题是(不相称!)问题是数组而不是链接列表,答案对链表没用!因为他们中的大多数都解决了移动数组中的元素以便插入的问题。
答案 0 :(得分:0)
链接列表不是“可寻址的”,从某种意义上说,如果要访问列表中间的元素,例如进行二进制搜索,则必须遍历列表。也就是说list.get(index)的性能是O(n)。如果您使用任何提供O(1)性能的数据结构进行备份,那么最终它将是一个数组。然后我们将回到分配额外空间和转移元素的问题,这不如二叉搜索树有效。
答案 1 :(得分:0)
实际上双循环链表中的二进制搜索无法完成,因为在二进制搜索中我们需要中间元素但我们不能访问链表中的中间元素,除非我们支付theta(n / 2)等等(一半)上半场(1/4)或下半场(3/4)的一半)。
但是制作二元搜索树的想法源于这个想法。我们几乎将数据的每个部分的中间部分用于搜索和其他目的。