Now that we’ve built out the structure of the TreeNode, let’s add some functionality! The first step will be to add children to our TreeNode, what good is a Tree if we can’t grow branches!
We want to create two variations of the
.addChild() method, one that accepts a complete
TreeNode as an argument and one that accepts a String as an argument and then creates a
TreeNode from that String. This technique, also called function overloading (or method overloading, depending on your programming language), is the practice of creating multiple instances of a function with different parameters and/or return types. You’ll run into this practice quite often as it serves a variety of roles, from making your code easier to use to allowing you to encapsulate (hide from the user) certain internal functions of your program.
If it only takes a dozen lines of code or so to give the user an easier way to create something, in our case just providing a String instead of creating a whole new
TreeNode, it is worth the extra time spent to have a happy customer, even if that customer is you.
Note: In some use cases, trees may also include a reference to their parent node, however, in our implementation of a tree, we will not have any need for this property and omit it completely.
Inside the TreeNode class and beneath the initializer, add an empty
.addChild(_:) function that accepts one parameter, a TreeNode named
newChild, you’ll want to omit the argument label.
Inside your new function, you need to add the
newChild to the list of
children. You can use the Array method
.append() to do this.
.addChild(_:) function below the first. This one will accept one parameter,
newChildData of type String, also with no argument label. Inside the function, create a new TreeNode using
newChildData and append it to the
children Array. Do this as one line of code.
Now let’s test your code by adding some children. At the bottom of the file, after the creation of
- Create a new TreeNode,
“Your tree is ”as the
- Add another child to
rootusing the second
.addChild()function, with “growing every day.” as the
You shouldn’t have seen any errors, but how do you know if the two branches were actually added to
root as children? Let’s check.
- On the line directly after
rootis initialized, print out whether
childrencontains any objects using the Array’s
- Add the same print statement at the bottom of the file, after you’ve added your second child to