Learn the basic algorithms for traversing trees and graphs.

# Trees

Premium Content - Free Preview

There are many different ways to store data in a computer. Arrays store data linearly, which makes them easy to store in a computer, but often you want a different data structure to organize the data in some manner. This module will cover *Trees*, a data structure that has many different purposes.

This is a tree:

**Terms**

A **Tree** contains individual **Nodes**, such as "2" and "6", and each Node can point to other Nodes, called **child** nodes. The Node that points to a child Node is called a **parent** node. The initial Node in the tree has no parent node and is called a **Root** node, which is "2" in the above tree. Every other Node has just one parent node, and there are no loops in the Tree. The main tree we'll deal with is a **Binary Tree**, which is a tree where each Node has a maximum of 2 child Nodes.

### A Tree is a Tree

Since a computer cannot just store the above Tree directly, we need a way to implement it for a computer. First, let's precisely define a Binary Tree.

A Binary Tree consists of:

- A node, which contains data, and points to:
- 0,1 or 2 sub-trees, which are also binary trees.

So a Tree is just a Node that points to additional Trees. This is a recursively-define data structure, which means we'll be able to use many Recursive Algorithms when dealing with Trees.

### Implementing a Tree

To implement a Tree, we'll create a Node class. It will store an integer of Data, and point to 2 child Nodes.

```
class Node {
int data;
Node left;
Node right;
}
```

The above code is actually enough for a basic Tree. The initial Node will form the root of the Tree, and other Nodes can be set as it's children. A Tree is just Nodes that point to other Nodes/Trees.

End of Free Content Preview. Please Sign in or Sign up to buy premium content.

## Comments

## Kendall Ponder

Jul 21, 3:47 PMIf it is best practice to make the node value private why isn't it best practice to make the children nodes private and require methods to access them?

## Learneroo

Jul 21, 4:08 PMIt may be "better practice" to do that for the Nodes as well, but its simpler to do these algorithms without creating getters and setters for the Node's children.

## Kendall Ponder

Jul 21, 5:30 PMThanks!

## Salvatore Baglieri

Feb 22, 10:58 AMI try to use this code https://www.learneroo.com/user_answers/7605767388

but I get back "Main.java:11: error: non-static variable this cannot be referenced from a static context Node node = new Node(ar[i]);"

I am going crazy. Where is the problem?

## Learneroo

Feb 22, 11:09 AM@Salvatore, looking briefly at your code, you should move your Node class out of the Main class (though you'll still have some more work to do).

## Salvatore Baglieri

Feb 22, 11:17 AMOps, thanks! Meanwhile I figured it out by myself.

And I am still fighting to find the solution. Keep (all of) you posted!