我们正在使用树数据结构。它不一定是二叉树。例如
A
/|\
B C D
|\
D E
[] - root node: A
[0] - first node at level 0: B
[1] - second node at level 0: C
[1, 1] - second node at level 1 of second node at level 0: E
...
现在,假设我们得到了一个描述,说明如何以移动列表的形式更改树。例如:
move(from: [1], to: [0])
move(from: [1, 0], to: [1])
move(from: [2], to: [1, 0, 0])
...
注意,from index指的是原始树,而to index指的是重新排列后的最终树。这意味着给定的移动列表并不代表我们可以执行一个接一个的操作。列表中的顺序并不重要。
现在,如何从描述中得到一个顺序操作的列表,以便将这些操作按顺序应用到原始树上,从而得到最终的树?我们可以假设变更的描述是有效的。
如果移动是不相关的,也就是说没有移动从已经移动的子树的子树移动到已经移动的子树。我正在处理那些案子。仅仅抵消指数是不够的,对于某些组合的移动顺序是相关的。
我可能有一个已知的算法?
谢谢!