【发布时间】:2018-03-08 14:30:24
【问题描述】:
我有一个树形数据结构,我将其转换为一个已排序的平面列表(展开的链表数据结构)。现在我想做一个快速的二进制搜索,我想出的想法是:每个列表元素都存储一个指向另一个元素的指针,该元素是原始树结构中的 MID 子元素。为了快速删除,最好让每个元素也指向其“父级”。
问题:
- 这已经是一个命名数据结构了吗?它的“官方”名称是什么?
- 排序插入、删除和随机访问(也称为搜索)的时间复杂度 O(?) 是多少?
[编辑] 这是这种结构的半图形表示:
这棵树(用 JSON 表示法编写):
{
"abc": {
"a": 42,
"b": 43,
"c": 44
},
"d": 45,
"e": {
"f": {
"g": 46,
"h": 47
}
}
}
被展平到这个列表: (“-> x”表示元素指向索引x处元素的地址) (每个元素存储来自原始树的键和值,如果有的话)
[0] "abc": nil -> 2
[1] "a": 42 -> nil
[2] "b": 43 -> nil
[3] "c": 44 -> nil
[4] "d": 45 -> nil
[5] "e": nil -> 6
[6] "f": nil -> 7
[7] "g": 46 -> nil
[8] "h": 47 -> nil
传说:
[INDEX] "KEY": VALUE -> ADDRESS OF MID CHILD ELEMENT
【问题讨论】:
标签: linked-list tree binary-search