27 lines
1.6 KiB
Markdown
27 lines
1.6 KiB
Markdown
|
Now that we covered the basic linear data-structures, let's move on to once, which branch out.
|
||
|
This task is about trees. A tree consists of connected nodes and each node has a certain amount of children nodes.
|
||
|
The nodes, which don't have any children are called leaves and the start node is called a root.
|
||
|
A tree also doesn't have any circles, meaning that no path from one node should lead back to it's self.
|
||
|
Trees are often associated with sorting, hierarchical data or decisions.
|
||
|
|
||
|
This description is for trees in general. The one we will discuss is called a binary-search-tree.
|
||
|
The only difference to the normal tree is, that it only has two children and all the left children have a lower
|
||
|
search value than the node and all the right nodes have a higher one.
|
||
|
These kind of trees are very useful for efficient searching.
|
||
|
|
||
|
For this tree we want to be able to perform four operations.
|
||
|
- We want to be able to automatically insert an element into the right place.
|
||
|
- We want to delete an element without destroying the definition of the binary-search-tree
|
||
|
- We want to find an element in the tree
|
||
|
- And we want to print out all the elements in a sorted way
|
||
|
|
||
|
Recursion is a good strategy to write functions for trees.
|
||
|
|
||
|
All but the delete functions are straight forward. The delete function needs some special casing.
|
||
|
If there are both children present, you have to find the lowest value on the right and replace the
|
||
|
current one with it and then recursivly delete that one.
|
||
|
If there are less than two children, the deletion is trivial.
|
||
|
|
||
|
Your task is to implement all these functions.
|
||
|
|