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]