10.27 Updatable Binary Trees—library(trees)
This libary module provides updatable binary trees with logarithmic access time.
Exported predicates:
gen_label(
?Index,
+Tree,
?Value)

assumes that Tree is a proper binary tree, and is true when Value
is the Indexth element in Tree. Can be used to enumerate
all Values by ascending Index.
get_label(
+Index,
+Tree,
Label)

treats the tree as an array of N elements and returns the Indexth.
If Index < 1 or > N it simply fails, there is no such element. As
Tree need not be fully instantiated, and is potentially unbounded,
we cannot enumerate Indices.
list_to_tree(
+List,
Tree)

takes a given List of N elements and constructs a binary Tree
where
get_label(
K,
Tree,
Lab)
<=> Lab is the Kth element of List.
map_tree(
:Pred,
+OldTree,
?NewTree)

is true when OldTree and NewTree are binary trees of the same shape
and Pred(Old,New) is true for corresponding elements of the two trees.
put_label(
+Index,
+OldTree,
Label,
NewTree)

constructs a new tree the same shape as the old which moreover has the
same elements except that the Indexth one is Label. Unlike the
"arrays" of
library(arrays)
, OldTree is not modified and you can hang on to
it as long as you please. Note that O(lg N) new space is needed.
put_label(
+Index,
+OldTree,
OldLabel,
NewTree,
+NewLabel)
 is true when OldTree and NewTree are trees of the same shape having
the same elements except that the Indexth element of OldTree is
OldLabel and the Indexth element of NewTree is NewLabel. You can
swap the <Tree,Label> argument pairs if you like, it makes no difference.
tree_size(
+Tree,
Size)

calculates the number of elements in the Tree. All trees made by
list_to_tree/2
that are the same size have the same shape.
tree_to_list(
+Tree,
List)

is the converse operation to
list_to_tree/2
. Any mapping or checking
operation can be done by converting the tree to a list, mapping or
checking the list, and converting the result, if any, back to a tree.
It is also easier for a human to read a list than a tree, as the
order in the tree goes all over the place.
Send feedback on this subject.