lnicola
6/24/2014 - 1:02 PM

Prolog BST

Prolog BST

insert(X, nil, node(X, nil, nil)).
insert(X, node(T, L, G), node(T, Aux, G)) - X  T, !, insert(X, L, Aux).
insert(X, node(T, L, G), node(T, L, Aux)) - insert(X, G, Aux).
 
remove(X, node(T, L, G), node(T, Aux, G)) - X  T, !, remove(X, L, Aux).
remove(X, node(T, L, G), node(T, L, Aux)) - X  T, !, remove(X, G, Aux).
 
remove(X, node(X, L, nil), L) - !.
remove(X, node(X, nil, G), G) - !.
remove(X, node(X, L, G), node(M, L, Aux)) - remove_min(G, Aux, M).
 
remove_min(node(T, nil, R), R, T) - !.
remove_min(node(T, L, G), node(T, Aux, G), M) - remove_min(L, Aux, M).
 
build([X  Xs], T, R) - insert(X, T, Aux), build(Xs, Aux, R).
build([], T, T).