我有一个树形数据结构,我将其变成一个排序的平面列表(一个展开的链表数据结构)。现在我想进行快速二进制搜索,我想出的想法是:每个列表元素都存储一个指向另一个元素的指针,该元素是原始树结构中的MID子元素。对于快速删除,每个元素也可以指向其“父”。
问题:
[edit]这是这种结构的半图形表示:
这棵树(用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
答案 0 :(得分:0)
如果我理解正确,你会考虑linked list(或者如果你也链接到前面的元素那么双链表)。
关于插入,链表的搜索时间为O(n),插入时间为O(1),树的搜索时间和访问时间范围从O(n)到O(log n),具体取决于他们如何分类,我会告诉你see for yourself。
最后,如果您使用的是具有O(log n)搜索时间的树,则最好直接使用它,否则它取决于将树转换为已排序链表所需的时间(可能是O(n))。
此外,作为奖励,阅读树的“中间”孩子的科学术语称为“有序遍历”,而不是预订和后序遍历。