Here is a very simple tree with two branches:

Two-branch tree

These are the steps that a simple computer program follows to draw the tree, with a red arrow indicating where the computer’s focus is at each stage:

Two-branch tree stage 1

2-Tree stage 2

2-Tree stage 3

2-Tree stage 4

2-Tree (animated)

If you had to give the computer an explicit instruction at each stage, the instructions might look something like this:

1. Start at node 1, draw a left branch to node 2 and colour the node green.

2. Return to node 1.

3. Draw a right branch to node 3 and colour the node green.

4. Finish.

Now try a slightly less simple tree with branches that fork twice:

Four-branch tree (static)

These are the steps that a simple computer program follows to draw the tree, with a red arrow indicating where the computer’s focus is at each stage:

4-Tree #1

4-Tree #2

4-Tree #3

4-Tree #4

4-Tree #5

4-Tree #6

4-Tree #7

4-Tree #8

4-Tree #9

4-Tree #10

4-Tree #11

4-Tree (animated)

If you had to give the computer an explicit instruction at each stage, the instructions might look something like this:

1. Start at node 1 and draw a left branch to node 2.

2. Draw a left branch to node 3 and colour it green.

3. Return to node 2.

4. Draw a right branch to node 4 and colour it green.

5. Return to node 2.

6. Return to node 1.

7. Draw a right branch to node 5.

8. Draw a left branch to node 6.

9. Draw a left branch to node 7 and colour it green.

10. Return to node 6.

11. Draw a left branch to node 8 and colour it green.

12. Finish.

It’s easy to see that the list of instructions would be much bigger for a tree with branches that fork three times, let alone four times or you. But you don’t need to give a full set of explicit instructions: you can use a program, or a list of instructions using variables. Suppose the tree has branches that fork *f* times. If *f* = 4, you will need an array variable level() with four values, level(1), level(2), level(3) and level(4). Now follow these instructions:

1. li = 1, level(1) = 0, level(2) = 0, ... level(f+1) = 0

2. level(li) = level(li) + 1

3. If level(li) = 1, draw a branch to the left and jump to step 7

4. If level(li) = 2, draw a branch to the right and jump to step 7

5. li = li - 1 (note that this line is reached if the tests fail in lines 3 and 4)

6. If li > 0, jump to step 2, otherwise jump to step 11

7. If li = f, draw a green node and jump to step 5

9. li = li + 1

10. Jump to step 2

11. Finish.

By changing the value of *f*, a computer can use those eleven basic instructions to draw any size of tree (I’ve left out details like changes in the length of branches and so on). When *f* = 4, the tree will look like this:

16-Tree (static)

16-Tree (animated)

With simple adjustments, the program can be used for other shapes whose underlying structure can be represented symbolically as a tree. The program is in fact a fractalizer, that is, it draws a fractal. So if you use a version of the program to draw fractals based on right-triangles, you can say you are “tright treeing” (tright = triangle-that-is-right).

Here is some tright treeing. Start with a simple isoceles right-triangle. It can be divided into smaller isoceles right-triangles by finding the midpoint of the hypotenuse, then repeating:

Right-triangle rep-2 stage 1

Right-triangle #2

Tright #3

Tright #4

Tright #5

Tright #6

Tright #7

Tright #7 (no internal lines)

You can distort the isoceles right-triangle in interesting ways by finding the midpoint of a side other than the hypotenuse, like this:

Right-triangle (distorted) #1

Distorted tright #2

Distorted tright #3

Distorted tright #4

Distorted tright #5

Distorted tright #6

Distorted tright #7

Distorted tright #8

Distorted tright #9

Distorted tright #10

Distorted tright #11

Distorted tright #12

Distorted tright #13

Distorted tright (animated)

Here’s a different right-triangle. When you divide it regularly, it looks like this:

Right-triangle rep-3 stage 1

Rep-3 Tright #2

3-Tright #3

3-Tright #4

3-Tright #5

3-Tright #6

3-Tright #7

3-Tright #8

3-Tright #9

3-Tright (one colour)

When you distort the divisions, you can create interesting fractals (click on images for larger versions):

Distorted 3-Tright

Distorted 3-Tright

Distorted 3-Tright

Distorted 3-Tright

Distorted 3-Tright

Distorted 3-Tright

Distorted 3-Tright (animated)

And when four of the distorted right-triangles (rep-2 or rep-3) are joined in a diamond, you can create shapes like these:

Creating a diamond #1

Creating a diamond #2

Creating a diamond #3

Creating a diamond #4

Creating a diamond (animated)

Rep-3 right-triangle diamond (divided)

Rep-3 right-triangle diamond (single colour)

Distorted rep-3 right-triangle diamond

Distorted 3-tright diamond

Distorted 3-tright diamond

Distorted 3-tright diamond

Distorted 3-tright diamond

Distorted 3-tright diamond

Distorted 3-tright diamond

Distorted 3-tright diamond

Distorted 3-tright diamond

Distorted 3-tright diamond

Distorted 3-tright diamond

Distorted 3-tright diamond (animated)

Distorted rep-2 right-triangle

Distorted 2-tright diamond

Distorted 2-tright diamond

Distorted 2-tright diamond

Distorted 2-tright diamond

Distorted 2-tright diamond (animated)