Am Donnerstag, 27. Oktober 2016 16:03:27 UTC+2 schrieb Ángel de Vicente:
Hi,
>
> I've been trying to implement some code to build Binary Search
> Trees. The code below works, I'm able to build a tree and then print it
> in ascending order, but it is quite ugly, with those Nullable types and
> having to access subtrees with code like tree.value.left instead of
> directly tree.left
>
> Here is a variant for a binary search tree which uses union types and
also has an empty tree. The definition is straightforward and - at least
for me - easy to understand.
type Empty
end
et = Empty() # a possible variant for an empty tree
typealias BT{T} Union{T, Empty}
type BTree
key::Int
left:: BT{BTree}
right::BT{BTree}
end
BST = BT{BTree} # type of binary search trees
BTree(key::Int) = BTree(key, et, et):: BST
function insert(t::BST, val)
if t == et
return BTree(val)
elseif val < t.key
return BTree(t.key, insert(t.left,val), t.right)
else
return BTree(t.key, t.left, insert(t.right,val))
end
end
# Testing:
# arr = [9,15,-4,3,11,6,-2,-16]
# tr = et
# for a in arr
# tr = insert(tr,a)
# end
# tr