Вопрос немного неясен.Насколько я понимаю, у вас будет дерево, в котором значение узла меньше значения его потомков.(Это можно реализовать, отсортировав дерево или написав другую функцию, которая создает его так, что это правда.)
Чтобы реализовать функцию, которая принимает первый (самый маленький) элемент дерева, вам необходимоудалите корень (который является самым маленьким), а затем объедините два дерева, которые вы получите.Это можно сделать, взяв в качестве нового корня меньший из двух корней и рекурсивно объединив новые деревья, которые вы получите.Следующий фрагмент должен сделать трюк:
let rec merge t1 t2 =
match t1, t2 with
| Leaf, t | t, Leaf -> t // Merging a tree and a leaf gives the tree
| (Node(ll, x1, lr) as t1), (Node(rl, x2, rr) as t2) ->
// When merging two trees, take the smaller root as a new root
// This gives you three new trees, so two of them must be recursively merged
if x1 < x2 then Node(merge ll lr, x1, t2)
else Node(t1, x2, merge rl rr)
let rec tryTake tree =
match tree with
| Leaf -> None
| Node(t1, y, t2) -> Some(y, merge t1 t2)