binary_search_tree

This commit is contained in:
2024-07-01 13:56:40 -04:00
parent 1610d6caf3
commit e0d8231e91
10 changed files with 374 additions and 0 deletions

View File

@@ -0,0 +1,26 @@
defmodule BinarySearchTree do
@type bst_node :: %{data: any, left: bst_node | nil, right: bst_node | nil}
@doc """
Create a new Binary Search Tree with root's value as the given 'data'
"""
@spec new(any) :: bst_node
def new(data), do: %{data: data, left: nil, right: nil}
@doc """
Creates and inserts a node with its value as 'data' into the tree.
"""
@spec insert(bst_node, any) :: bst_node
def insert(nil, data), do: new(data)
def insert(tree, data) when data <= tree.data, do:
%{tree | left: insert(tree.left, data)}
def insert(tree, data), do:
%{tree | right: insert(tree.right, data)}
@doc """
Traverses the Binary Search Tree in order and returns a list of each node's data.
"""
@spec in_order(bst_node) :: [any]
def in_order(nil), do: []
def in_order(tree), do: in_order(tree.left) ++ [tree.data | in_order(tree.right)]
end