Trees
Trees
C, 2e
Jhalak Dutta
Trees
• 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.
• Types of Trees
General Trees
Forests
Binary 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
forest) is obtained by deleting the root and the edges
connecting the root node to nodes at level 1.
• Every node of a tree is the root of some sub-tree. Therefore, all
the sub-trees immediately below a node form a forest.
• 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.
• We can convert a forest into a tree by adding a single node as
the root node of the tree.
Binary Trees
• A binary tree is a data structure which 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.
• 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.
1 ROOT NODE
T1 T2
2 3
B C G H
D I
E J
• Copies of binary trees: Two binary trees T and T’ are said to be copies if they
have similar structure and same content at the corresponding nodes.
TREE T
TREE T”
A A
B C B C
E
D E D
Complete Binary Trees
• A complete binary tree is a binary tree which satisfies two properties.
• First, in a complete binary tree every level, except possibly the last, is
completely filled.
• Second, all nodes appear as far left as possible
• In a complete binary tree Tn, there are exactly n nodes and level r of T can have
at most 2r nodes.
• The formula to find the parent, left child and right child can be given as:
• If K is a parent node, then its left child can be calculated as
2 * K and its right child can be calculated as 2 * K + 1. 1
For example, the children of node 4 are 8 (2*4) and 9 (2* 4 + 1). 2 3
8 9 1 1 1 1
0 1 2 3
Extended Binary Trees
• A binary tree T is said to be an extended binary tree (or a 2-tree) if each node in
the tree has either no child or exactly two children.
• In an extended binary tree nodes that have two children are called internal nodes
and nodes that have no child or zero children are called external nodes. In the
figure internal nodes are represented using a circle and external nodes are
represented using squares.
• To convert a binary tree into an extended tree, every empty sub-tree is replaced
by a new node. The original nodes in the tree are the internal nodes and the new
nodes added are called the external nodes.
Binary tree
Linked Representation of Binary Trees
• In computer’s memory, a binary tree can be maintained either using a
linked representation or using sequential representation.
• In linked representation of 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 as below.
struct node
{ 1
int data; 4 5 6 7
};
Sequential Representation of Binary Trees
• Sequential representation of trees is done using a single or one dimensional array.
Though, it is the simplest technique for memory representation, it is very
inefficient as it requires a lot of memory space.
• A sequential binary tree follows the rules given below:
• One dimensional array called TREE is used.
• The root of the tree will be stored in the first location. That is, TREE[1] will store
the data of the root element.
• The children of a node K will be stored in location (2*K) and (2*K+1).
• The maximum size of the array TREE is given as (2h-1), where h is the height of the
tree.
• An empty tree or sub-tree is specified using NULL. If TREE[1] = NULL, then the tree
is empty. 20
15 35
12 3
17 21 9
3 4
16 18
6 5
Expression Trees
• Binary trees are widely used to store algebraic expressions. For
example, consider the algebraic expression Exp given as:
Exp = (a – b ) + ( c * d)
• This expression can be represented using a binary tree as shown
in figure
+
- *
a b c d
Tournament Trees
• In a tournament tree (also called a selection tree), each external
node represents a player and each internal node represents the
winner of the match played between the players represented by its
children nodes.
• These tournament trees are also called winner trees because they
are being used to record the winner at each level.
• We can also have a loser tree that records the loser at each level.
a
a e
a
d e g
a b c d e f g h
Traversing a Binary Tree
• Traversing a binary tree is the process of visiting each node in the tree
exactly once in a systematic way.
• There are three different algorithms for tree traversals, which differ in
the order in which the nodes are visited.
Pre-order algorithm
In-order algorithm
Post-order algorithm
Pre-order Algorithm
• To traverse a non-empty binary tree in preorder, the following
operations are performed recursively at each node.
• The algorithm starts with the root node of the tree and continues
by:
Visiting the root node
Traversing the left subtree A
D E
A, B, D, C, E, F, G, H and I
F
H I
In-order Algorithm
• To traverse a non-empty binary tree in in-order, the following operations are
performed recursively at each node.
• The algorithm starts with the root node of the tree and continues by,
Traversing the left subtree
Visiting the root node
A
Traversing the right subtree
B C
D E
B, D, A, E, H, G, I, F and C
G
H I
Post-order Algorithm
• To traverse a non-empty binary tree in post-order, the following
operations are performed recursively at each node.
• The algorithm starts with the root node of the tree and continues
by,
Traversing the left subtree
Traversing the right subtree A
D E
D, B, H, I, G, F, E, C and A G
H I
Applications of Trees
• Trees are used to store simple as well as complex data. Here simple
means an int value, char value and complex data (structure).
• Trees are often used for implementing other types of data structures like
hash tables, sets, and maps.
• A self-balancing tree, Red-black tree is used in kernel scheduling to
preempt massively multi-processor computer operating system use.
• Another variation of tree, B-trees are used to store tree structures on
disc. They are used to index a large number of records.
• B-trees are also used for secondary indexes in databases, where the index
facilitates a select operation to answer some range criteria.
• Trees are used for compiler construction.
• Trees are also used in database design.
• Trees are used in file system directories.
• Trees are also widely used for information storage and retrieval in symbol
tables.