let expand_path path =
    let oldRoot = List.hd path in
    let path = expand_path_with_old path in
    let (root, rest) = (List.hd path, List.tl path) in
    let get_label n = Tree.get_node_label (Tree.get_node_label n) in
    let root =
      match Tree.get_parent_edge oldRoot with
        None -> Tree.create_root (get_label root)
      |        Some ed ->
          let root' = Tree.create_root (get_label root) in
          Tree.create_child (get_label root) (Tree.get_edge_label ed) root' in
    let rec expand last path acc =
      match path with
        [] -> List.rev acc
      |        first::rest ->
          let n = Tree.create_child (get_label first) (parent_edge first) last in
          expand n rest (n::acc) in
    expand root rest [root]