代码之家  ›  专栏  ›  技术社区  ›  Srđan RaÅ¡ić

基于变化描述的树重排

  •  0
  • Srđan RaÅ¡ić  · 技术社区  · 6 年前

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

      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指的是重新排列后的最终树。这意味着给定的移动列表并不代表我们可以执行一个接一个的操作。列表中的顺序并不重要。

    现在,如何从描述中得到一个顺序操作的列表,以便将这些操作按顺序应用到原始树上,从而得到最终的树?我们可以假设变更的描述是有效的。

    如果移动是不相关的,也就是说没有移动从已经移动的子树的子树移动到已经移动的子树。我正在处理那些案子。仅仅抵消指数是不够的,对于某些组合的移动顺序是相关的。

    我可能有一个已知的算法?

    谢谢!

    0 回复  |  直到 6 年前