A tree is recursively defined as a set of one or more nodes where one node is designated as the root of the tree and all the remaining nodes can be partitioned into non-empty sets each of which is a sub-tree of the root.

**Basic Terminology**

**Root node** The root node R is the topmost node in the tree. If R = NULL, then it means the tree is empty

**Sub-trees** If the root node R is not NULL, then the trees T1 , T2 , and T3 are called the sub-trees of R.

**Leaf node** A node that has no children is called the leaf node or the terminal node

**Path **A sequence of consecutive edges is called a path. For example the path from the root node A to node I is given as: A, D, and I.

**Ancestor node** An ancestor of a node is any predecessor node on the path from root to that node. The root node does not have any ancestors. In the tree given in nodes A, C, and G are the ancestors of node K.

**Descendant node** A descendant node is any successor node on any path from the node to a leaf node. Leaf nodes do not have any descendants. In the tree given in nodes C, G, J, and K are the descendants of node A

**Level number Every** node in the tree is assigned a level number in such a way that the root node is at level 0, children of the root node are at level number 1. Thus, every node is at one level higher than its parent. So, all child nodes have a level number given by parent’s level number + 1.

**Degree Degree** of a node is equal to the number of children that a node has. The degree of a leaf node is zero

**In-degree** In-degree of a node is the number of edges arriving at that node

**Out-degree** Out-degree of a node is the number of edges leaving that node

**TYPES OF TREES**

**Trees are of following 6 types:**

- General trees
- Forests
- Binary trees
- Binary search trees
- Expression trees
- Tournament trees

**General Trees**

**General trees** are data structures that store elements hierarchically. The top node of a tree is the root node and each node, except the root, has a parent. A node in a general tree (except the leaf nodes) may have zero or more sub-trees. General trees which have 3 sub-trees per node are called ternary trees. However, the number of sub-trees for any node may be variable. For example, a node can have 1 sub-tree, whereas some other node can have 3 sub-trees.

**Forests**

A forest is a disjoint union of trees. A set of disjoint trees (or forests) is obtained by deleting the root and the edges connecting the root node to nodes at level 1.

A forest can also be defined as an ordered set of zero or more general trees. While a general tree must have a root, a forest on the other hand may be empty because by definition it is a set, and sets can be empty

**Binary Trees**

A **binary tree** is a data structure that is defined as a collection of elements called nodes. In a binary tree, the topmost element is called the root node, and each node has 0, 1, or at the most 2 children. A node that has zero children is called a leaf node or a terminal node. Every node contains a data element, a left pointer which points to the left child, and a right pointer which points to the right child. The root element is pointed by a ‘root’ pointer. If root = NULL, then it means the tree is empty

**Terminology**

**Parent **If N is any node in T that has left successor S1 and right successor S2, then N is called the parent of S1 and S2. Correspondingly, S1 and S2 are called the left child and the right child of N. Every node other than the root node has a parent

**Level number** Every node in the binary tree is assigned a level number . The root node is defined to be at level 0. The left and the right child of the root node have a level number 1. Similarly, every node is at one level higher than its parents. So all child nodes are defined to have level number as parent’s level number + 1.

**Degree of a node** It is equal to the number of children that a node has. The degree of a leaf node is zero. For example, in the tree, degree of node 4 is 2, degree of node 5 is zero and degree of node 7 is 1

**Sibling **All nodes that are at the same level and share the same parent are called siblings (brothers). For example, nodes 2 and 3; nodes 4 and 5; nodes 6 and 7; nodes 8 and 9; and nodes 10 and 11 are siblings

**Leaf node** A node that has no children is called a leaf node or a terminal node. The leaf nodes in the tree are: 8, 9, 5, 10, 11, and 12

**Similar binary trees** Two binary trees T and T¢ are said to be similar if both these trees have the same structure. Figure 9.5 shows two similar binary trees

**Copies Two binary trees** T and T¢ are said to be copies if they have similar structure and if they have same content at the corresponding nodes.

**Edge **It is the line connecting a node N to any of its successors. A binary tree of n nodes has exactly n – 1 edges because every node except the root node is connected to its parent via an edge

Path A sequence of consecutive edges. For example, the path from the root node to the node 8 is given as: 1, 2, 4, and 8

**Depth **The depth of a node N is given as the length of the path from the root R to the node N. The depth of the root node is zero.

**Height of a tree** It is the total number of nodes on the path from the root node to the deepest node in the tree. A tree with only a root node has a height of 1. A binary tree of height h has at least h nodes and at most 2h – 1 nodes. This is because every level will have at least one node and can have at most 2 nodes. So, if every level has two nodes then a tree with height h will have at the most 2h – 1 nodes as at level 0, there is only one element called the root. The height of a binary tree with n nodes is at least log2 (n+1) and at most n

**Representation of Binary Trees in the Memory**

**Linked representation of binary trees** In the linked representation of a binary tree, every node will have three parts: the data element, a pointer to the left node, and a pointer to the right node. So in C, the binary tree is built with a node type given below.

```
struct node {
struct node *left;
int data;
struct node *right;
};
```