+
+let get_followingSibling tree ln =
+ let rec aux n acc =
+ let n1 = Naive_tree.next_sibling tree n in
+ if n1 == Naive_tree.nil then acc
+ else aux n1 (n1::acc)
+ in
+ let ll = List.map (fun n -> let res = aux n [] in
+ List.rev res ) ln in
+ List.fold_left (fun acc l1 -> union_list tree acc l1) [] ll
+
+
+let rec get_firstBling tree n pred =
+ if n== Naive_tree.nil then pred
+ else get_firstBling tree (Naive_tree.prev_sibling tree n) n
+
+let get_parent tree ln =
+ let l = List.fold_left (fun acc n ->
+ let n1 = get_firstBling tree n Naive_tree.nil in
+ let n2 = Naive_tree.parent_of_first tree n1 in
+ if n2 == Naive_tree.nil or List.mem n2 acc then acc
+ else union_list tree [n2] acc
+ ) [] ln
+ in
+ l
+
+
+
+let get_ancestor tree ln =
+ let rec aux tree l1 acc =
+ match l1 with
+ [] -> acc
+ | _ -> let ll1 = get_parent tree l1 in
+ let acc1 = union_list tree acc ll1 in
+ aux tree ll1 acc1
+ in
+ let l = aux tree ln [] in
+ l
+
+let get_preSibling tree ln =
+ let rec aux n acc =
+ let n1 = Naive_tree.prev_sibling tree n in
+ if n1 == Naive_tree.nil then acc
+ else aux n1 (n1::acc)
+ in
+ let ll = List.map (fun n -> aux n [] ) ln in
+ List.fold_left (fun acc l1 -> union_list tree acc l1) [] ll
+
+