我有一个无序的树形式,例如:
Root
A1
A1_1
A1_1_1
A1_1_2
A1_1_2_1
A1_1_2_2
A1_1_2_3
A1_1_3
A1_1_n
A1_2
A1_3
A1_n
A2
A2_1
A2_2
A2_3
A2_n
我的问题:如果我需要 A1_1_2_3 的长值,我第一次遍历节点时我会深入搜索得到它,但是:在以后调用同一个节点我必须得到没有递归搜索的价值。为什么?如果这棵树在到达我的A1_1_2_3节点之前会有数十万个节点,则需要花费太多时间。 我想到的是,在第一次遍历后留下一些指针。例如。对于我的情况,当我给出A1_1_2_3的长值时,我还会给出一个数组,其中包含将来搜索同一节点的信息,并说:要获得A1_1_2_3,我需要:
所以我想我会将这些信息与A1_1_2_3的值一起存储为索引数组:[0,0,1,2]。通过这样做,我可以在后续调用A1_1_2_3时轻松地重新创建节点,并且每次都避免递归。
然而节点可以改变。在后续调用中,我可能有一个新结构,因此我之前存储的索引将不再匹配。但是,如果发生这种情况,我想,每当我不再找到该元素时,我会递归地返回一个级别并搜索该项目,依此类推,直到我再次找到它并再次存储索引以供将来引用:
e.g。如果我的A1_1_2_3现在位于这个新结构中:
A1_1
A1_1_0
A1_1_1
A1_1_2
A1_1_2_1
A1_1_2_2
A1_1_21_22
A1_1_2_3
...在这种情况下,新元素A1_1_0破坏了我的存储结构,所以我会回到一个级别并再次递归搜索子项,直到我再次找到它。
这是否有意义,我在这里想到的,还是我过于复杂的事情?我在谈论一个无序的树,它最多可以有三十万个节点,而且我能尽可能快地跳到节点是至关重要的。但树也可以很小,在10个节点之下。
在这种情况下,是否有更有效的搜索方式?
谢谢你的任何想法。
编辑:
我忘了添加:我在后续调用中需要的不仅仅是相同的值,而且它的位置也很重要,因为我必须在该子节点之后获得子页面的下一页(因为它是一个树结构,我调用了分页在最初选择的节点之后的节点上)。希望现在更有意义。