根据更改描述重新排列树

时间:2018-09-16 15:27:47

标签: algorithm tree

我们正在使用树数据结构。它不必是二叉树。例如

  A
 /|\
B C D 
  |\
  D E

假设节点(子树)索引被定义为整数数组,其中索引i的元素指定级别i的第n个节点。例如

[] - 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])
...

I。 e。使原始树中索引[1]处的节点(子树)最终在最终树中索引[0]处。使原始树中位于索引[1,0]的节点(子树)最终位于最终树中位于索引[1]的地方。

请注意,from索引是指原始树,而to索引是指最后一棵树-重新排列后。这意味着给定的动作列表并不代表我们可以一个接一个地执行的操作。该列表中的顺序并不重要。

现在,如何从该描述中获得一系列顺序操作,以便在原始树上按顺序应用这些操作将为我们提供最终的树?我们可以假定更改描述是有效的。

如果移动不相关,也就是说没有从已移动的子树的子树移动到已经移动的子树的移动,我已经到了可以工作的地步。我正在为那些案件苦苦挣扎。仅偏移索引是不够的,对于某些组合的移动,顺序是相关的。

我也许对此有一个已知算法?

谢谢!

0 个答案:

没有答案