Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -module(drzewobinarne).
- -export([empty/0, insert/3, has_value/2, has_value_exceptions/2, generate_from_list/1, generate_random_tree/0]).
- empty() -> {node, 'nil'}.
- %Wstawianie elementu do drzewa
- insert(Key, Val, {node, 'nil'}) ->
- {node, {Key, Val, {node, 'nil'}, {node, 'nil'}}};
- insert(NewKey, NewVal, {node, {Key, Val, Smaller, Larger}}) when NewKey < Key ->
- {node, {Key, Val, insert(NewKey, NewVal, Smaller), Larger}};
- insert(NewKey, NewVal, {node, {Key, Val, Smaller, Larger}}) when NewKey > Key ->
- {node, {Key, Val, Smaller, insert(NewKey, NewVal, Larger)}};
- insert(Key, Val, {node, {Key, _, Smaller, Larger}}) ->
- {node, {Key, Val, Smaller, Larger}}.
- %Generacja losowego drzewa (liczby)
- generate_random_tree() -> generate_from_list([{K, V} || K <- rand:uniform(20), V <- rand:uniform(20), _ <- lists:seq(1, 10)]).
- %Generacja drzewa z listy
- generate_from_list([]) -> empty();
- generate_from_list([{K,V}|T]) -> insert(K, V, generate_from_list(T)).
- %Zwinięcie drzewa do listy (3 dowolne metody)
- %Szukanie elementu wersja normalana
- has_value(_, {node, 'nil'}) ->
- false;
- has_value(Val, {node, {_, Val, _, _}}) ->
- true;
- has_value(Val, {node, {_, _, Left, Right}}) ->
- case has_value(Val, Left) of
- true -> true;
- false -> has_value(Val, Right)
- end.
- %Szukanie elementu wersja z wyjątkami
- has_value_exceptions(Val, Tree) ->
- try has_value_exceptions1(Val, Tree) of
- false -> false
- catch
- true -> true
- end.
- has_value_exceptions1(_, {node, 'nil'}) ->
- false;
- has_value_exceptions1(Val, {node, {_, Val, _, _}}) ->
- throw(true);
- has_value_exceptions1(Val, {node, {_, _, Left, Right}}) ->
- has_value_exceptions1(Val, Left),
- has_value_exceptions1(Val, Right).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement