## Binary Tree Terms#

A tree has a `root`

and `leaves`

.

A `root node`

has no parent nodes.

A `leaf node`

has zero children.

A `lef node`

is an `external node`

, non leaf node are `internal nodes`

.

The `degree`

of a node is the number of children of that node.
The lines between nodes are called `edges`

.

## Binary Tree Characteristics#

- In a binary tree, each node has a
**maximum of two children**. - In a
*classic*binary tree there is**one root**. - There is only
**one unique path**from any node to the root

An empty tree has no nodes, and should be considered a binary tree.

```
class Node(object):
def __init__(self, value):
self.value = value
self.left = None
self.right = None
```

## A Full Binary Tree#

Every node that has a descendant has two descendants.

## A Complete Binary Tree#

When we fill out the tree we go from top to bottom and then left to right. All levels are completely filled out except the lowest level nodes which are filled from as left as possible.

## A Perfect Binary Tree#

All nodes with descendants have two descendants and all leaves are on the same level.

## Height or Depth#

A tree height is the number of `edges`

to reach the furthest `node`

.

The `height`

of a particular `node`

is the number of edges to reach the `node`

. The `root`

is at `height`

0.

## Level#

The `level`

of a node is the number of edge to traverse to reach the `node`

from the `root`

. The `root`

is at level 0.