Gijs f53cbfe93d | 3 years ago | |
---|---|---|
workshop/code | 3 years ago | |
.gitignore | 3 years ago | |
README.md | 3 years ago | |
tree-sort.svg | 3 years ago |
README.md
Tree sort
Repository for the workshop on the tree sort algorithm.
You'll find the workshop material in the workshop
folder.
Recipes
Recipes used during the workshop to execute the tree sort algorithm manually (with a group of people).
To insert a node within a tree
This recipe inserts a new node into an (empty) tree. It is assumed there is a place defined where the tree will be started (rooting point?). When the recipe is executed the current position is considered to be rooting point.
-
Look at your current position, if it's empty (there is no node) this will be your place: you are inserted in the tree, and the recipe is finished. If there is a node continue with step two.
-
Ask the node in the current position for its value.
-
Compare the answer of the node to your own value. Is your value smaller than theirs? Then follow the left arm of the node, and take that as the new current position and move back to step one. Otherwise continue with step four.
-
Is your own value the same as or bigger than the answer the node gave? Then follow the right arm of the node, and take that as your new current position and go back to step one.
To measure the depth of a tree
This recipe discovers the depth of the deepest branch in the (sub)tree. It is initiated by asking the root or any other node to measure its depth.
-
Ask the node attached to your left arm for its depth, or take zero if you have none.
-
Ask the node attached to your right arm for its depth, or take zero if you have none.
-
Pick the greater one out of the answers you collected in step one and two, and add 1 (increment by one).
-
Answer the number you calculated in step 3 to the node which asked you to measure your depth.
To traverse the tree in order:
This recipe transforms the (sub)tree into an orderd row (or list). It is initiated by asking the root or any other node to traverse.
-
If you have a left node: ask it to traverse. Once it has finished traversing ask the resulting row (list) to stand to the left of you. It is important the row maintains it order.
-
If you have a right node: ask it to traverse. Once it has finished traversing ask the resulting row (list) to stand to the right of you. It is important the row maintains it order.
-
By combining the row on the left, yourself, and the row to your right a new row has formed. Tell the node who asked you to traverse that you're ready.
Code implementations
In the folder workshop/code
a simple implementation of the tree sort algorithm can be found.
workshop/code/treesort.py
Implementation of the binary search tree. When the script is
python workshop/code/treesort.py
workshop/code/tree-visualizer.py
Visualizes a tree using graphviz
python workshop/code/tree_visualizer.py
workshop/code/text-tree.py
Reads a text (workshop/text-to-sort.txt
) and generates a visual tree:
python workshop/code/text_tree.py
Requirements
The implementations are written in python and require python 3, find information on how to install python here
The visualizer and the text_tree both use graphviz to generate the visualization. Find information on how to install graphviz here
The visualizer and the text_tree also require graphviz the graphviz python bindings. The easiest way to install them is through pip:
pip3 install graphviz