### 1. Full (Proper) Binary Tree#

```
# Each nodes has either 2 or 0 children.
12
8 18
5 11
```

### 2. Degenerate (Pathological) Binary Tree#

```
# Each internal node has either a right or a left child.
# Each node is a left node or each node is a right node.
1 1
2 2
3 3
```

### 4. Complete Binary Tree#

```
# Each level is filled from left to right.
8
5 3
4 6 7
```

### 5. Perfect Binary Tree#

```
# Each internal node has 2 children and each leaf node is on the same level.
0 8
1 5 3
2 4 6 7 8
N = 2^(h+1) - 1 | height of root = 0
```

### 6. Balanced Binary Tree#

```
# For each node, the difference in height between
# the left and right subtrees is 1 or less.
0
1 2
3 4
```

### 7. Binary Search Tree (BST)#

```
# Each node in the left subtree is less than the parent.
# Each node in the right subtree is greater than the parent.
# This rule applies to every node in the tree.
8
4 15
3 5 12 20
```

### TreeNode Definition#

```
# Definition for a binary tree node.
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
```

GeeksForGeeks: Types of Binary Trees