Algorithm 从链接列表创建索引树(平衡BST)

Algorithm 从链接列表创建索引树(平衡BST),algorithm,data-structures,indexing,binary-search-tree,doubly-linked-list,Algorithm,Data Structures,Indexing,Binary Search Tree,Doubly Linked List,我有一个双链表,我想从中创建一个索引树,以提高随机访问性能。链表中的节点没有唯一标识,可以是具有下一个和上一个引用的派生节点对象的任何实例。为了提高对节点的随机访问性能,即对列表的特定索引的随机访问性能,我想在此列表顶部添加一个索引树。例如,用户可能希望检索列表的第三个节点,然后检索第五个节点。 我想知道对于这个问题是否已经提出了任何解决方案 我想到的一个解决方案是使用一种特殊类型的二叉树,其中每个节点都保留一个数字。此数字将显示其子引用中保留的节点数。例如,如果根节点的编号为5,则表示列表中有

我有一个双链表,我想从中创建一个索引树,以提高随机访问性能。链表中的节点没有唯一标识,可以是具有下一个和上一个引用的派生节点对象的任何实例。为了提高对节点的随机访问性能,即对列表的特定索引的随机访问性能,我想在此列表顶部添加一个索引树。例如,用户可能希望检索列表的第三个节点,然后检索第五个节点。 我想知道对于这个问题是否已经提出了任何解决方案

我想到的一个解决方案是使用一种特殊类型的二叉树,其中每个节点都保留一个数字。此数字将显示其子引用中保留的节点数。例如,如果根节点的编号为5,则表示列表中有5个节点。假设左侧节点的编号为3,右侧节点的编号为2,这意味着前3个节点位于左侧,其余2个位于右侧。这将转到叶,叶的编号为1,它将指向列表的节点。所需的树是一个平衡的BST

另一种方法是把列表中的一个节点的索引看作它的数据(因此它被排序)并使用类似的东西。此外,在树节点中添加对实际列表节点的引用,以便编号为(数据)2的节点引用列表中的第二个节点。 我想知道从链表创建和维护这棵树的最快方法是什么

先谢谢你

编辑:
由于内存问题和持久性需求,我不得不使用链表,而不仅仅是一个引用数组。这部分已经完成了,所以考虑链表从头部开始。此外,您还可以访问列表中项目的尾部和数量

答案很简单:指向列表中节点的指针数组。要获取第三个节点,只需为数组中的第三个元素编制索引。如果这样做,您将不再需要节点中的上一个和下一个成员;只需转到数组的上一个或下一个元素


如果您仍然希望维护动态链表,只需使用列表(C#)或向量(C++)而不是数组,这样就可以插入和删除元素。

内存是一个问题,我不能只将引用保留在数组中,这是我们希望将元素保留在链表而不是数组中的主要原因。我需要实现我自己的链表,而不是使用列表或向量,因为我还需要持久性。然而,这不是我的问题,这部分已经完成了。