With our private
add(_:to:) function complete, it is time to implement our public-facing
add(_:) method. Users don’t need to be able to add a value to specific subtrees in our structure, actually, if we allowed them to do this, it might break the rules of our BST.
The public-facing function will also handle the case of adding the first value to our tree, the root. We don’t have an initializer for the
BinarySearchTree class because the instance variable is optional. This is common when you want a user to be able to create an instance of your class without having to know any of the values they want to add yet.
Our public function will also simply allow the user to add any value that is the same type of the tree using generics to enforce the type conformance.
Underneath the comment for the add function in the “Public Functions” section, create a new empty function,
add(_:), that takes one parameter,
value of type
T, it should not have an argument label.
Inside the function, create a new constant,
node, equal to a new
Under your new
node, create an
if-let statement that creates
self.root exists. Inside the
if clause, call the private
add(_:to:) function passing
node, to the new
else clause to the
if-let statement, it will handle the case when there is no root already in the BinarySearchTree. Inside the
else clause, set
self.root equal to
Under the instantiation of
numberTree at the bottom of the file, add the Integers 5, 6, and 2 to the tree by calling
add(_:) three times.