Data Structure Module 4
Data Structure Module 4
Trees, Binary Trees-Tree Operations, Binary Tree Representation, Tree Traversals, Binary
Search Trees- Binary Search Tree Operations
Graphs, Representation of Graphs, Depth First Search and Breadth First Search on Graphs,
Applications of Graphs
In linear data structure data is organized in sequential order and in non-linear data structure data is
organized in random order. A tree is a very popular non-linear data structure used in a wide range of
applications.
Tree is a non-linear data structure which organizes data in hierarchical structure and this is a
recursive definition.
In tree data structure, every individual element is called as Node. Node in a tree data structure stores
the actual data of that particular element and link to next element in hierarchical structure.
Terminology
1. Root
In a tree data structure, the first node is called as Root Node. Every tree must have a root node. We can
say that the root node is the origin of the tree data structure. In any tree, there must be only one root
node. We never have multiple root nodes in a tree.
2. Edge
In a tree data structure, the connecting link between any two nodes is called as EDGE. In a tree with 'N'
number of nodes there will be a maximum of 'N-1' number of edges.
3. Parent
In a tree data structure, the node which is a predecessor of any node is called as PARENT NODE. In
simple words, the node which has a branch from it to any other node is called a parent node. Parent
node can also be defined as "The node which has child / children".
4. Child
In a tree data structure, the node which is descendant of any node is called as CHILD Node. In simple
words, the node which has a link from its parent node is called as child node. In a tree, any parent node
can have any number of child nodes. In a tree, all the nodes except root are child nodes.
5. Siblings
In a tree data structure, nodes which belong to same Parent are called as SIBLINGS. In simple words,
the nodes with the same parent are called Sibling nodes.
6. Leaf
In a tree data structure, the node which does not have a child is called as LEAF Node. In simple words,
a leaf is a node with no child.
In a tree data structure, the leaf nodes are also called as External Nodes. External node is also a node
with no child. In a tree, leaf node is also called as 'Terminal' node.
7. Internal Nodes
In a tree data structure, the node which has atleast one child is called as INTERNAL Node. In simple
words, an internal node is a node with atleast one child.
In a tree data structure, nodes other than leaf nodes are called as Internal Nodes. The root node is
also said to be Internal Node if the tree has more than one node. Internal nodes are also called as
'Non-Terminal' nodes.
8. Degree
In a tree data structure, the total number of children of a node is called as DEGREE of that Node. In
simple words, the Degree of a node is total number of children it has. The highest degree of a node
among all the nodes in a tree is called as 'Degree of Tree'
9. Level
In a tree data structure, the root node is said to be at Level 0 and the children of root node are at Level 1 and the
children of the nodes which are at Level 1 will be at Level 2 and so on... In simple words, in a tree each step
from top to bottom is called as a Level and the Level count starts with '0' and incremented by one at each level .
10. Height
In a tree data structure, the total number of edges from leaf node to a particular node in the longest
path is called as HEIGHT of that Node. In a tree, height of the root node is said to be height of the tree.
In a tree, height of all leaf nodes is '0'.
11. Depth
In a tree data structure, the total number of egdes from root node to a particular node is called
as DEPTH of that Node. In a tree, the total number of edges from root node to a leaf node in the longest
path is said to be Depth of the tree. In simple words, the highest depth of any leaf node in a tree is said
to be depth of that tree. In a tree, depth of the root node is '0'.
12. Path
In a tree data structure, the sequence of Nodes and Edges from one node to another node is called
as PATH between that two Nodes. Length of a Path is total number of nodes in that path. In below
example the path A - B - E - J has length 4.
2. BINARY TREE
In a normal tree, every node can have any number of children. A binary tree is a special type of tree
data structure in which every node can have a maximum of 2 children. One is known as a left child and
the other is known as right child.
A tree in which every node can have a maximum of two children is called Binary Tree.
In a binary tree, every node can have either 0 children or 1 child or 2 children but not more than 2
children.
Example
In a binary tree, every node can have a maximum of two children. But in strictly binary tree, every node
should have exactly two children or none. That means every internal node must have exactly two
children. A strictly Binary Tree can be defined as follows...
A binary tree in which every node has either two or zero number of children is called Strictly Binary Tree.
Strictly binary tree is also called as Full Binary Tree or Proper Binary Tree or 2-Tree
In above figure, a normal binary tree is converted into full binary tree by adding dummy nodes.
3. BINARY TREE REPRESENTATIONS
A binary tree data structure is represented using two methods. Those methods are as follows...
Array Representation
Linked List Representation
Consider the following binary tree...
The above example of the binary tree represented using Linked list representation is shown as follows...
4. TREE OPERATIONS
The following operations can be done on a tree
Inserting a new node.
Deleting a specific node.
Searching a specific node. (Searching can be done by traversal).
That means here we have visited in the order of A-B-D-I-J-F-C-G-K-H using Pre-Order Traversal.
Pre-Order Traversal for above example binary tree is A - B - D - I - J - F - C - G - K – H
In a binary search tree, all the nodes in the left subtree of any node contains smaller values and all the
nodes in the right subtree of any node contains larger values as shown in the following figure...
The above tree is a Binary Search Tree. In this tree, left subtree of every node contains nodes with
smaller values and right subtree of every node contains larger values.
Every binary search tree is a binary tree but every binary tree need not to be binary search tree.
struct Node
{
int data;
struct Node *left;
struct Node *right;
};
struct Node *root=NULL;
struct Node* search(int data);
void insert(int);
struct Node* minValueNode(struct Node*);
struct Node* deleteNode(struct Node*, int);
void inOrder(struct Node* );
void preOrder(struct Node* );
void postOrder(struct Node*);
void main()
{
int choice, value;
printf("\n----- Binary Tree -----\n");
while(1){
printf("\n***** MENU *****\n");
printf("1. Insert\n2.search\n 3.inOrder\n4.preOrder\n 5.postOrder\n6.Delete\n 7.Exit");
printf("\nEnter your choice: ");
scanf("%d",&choice);
switch(choice)
{
case 1: printf("\nEnter the value to be insert: ");
scanf("%d", &value);
insert(value);
break;
case 5: postOrder(root);
break;
case 7: exit(0);
default: printf("\nPlease select correct operations!!!\n");
}
}
}
//not found
if(current == NULL)
{
return NULL;
}
}
}
return current;
}
tempNode->data = data;
tempNode->left = NULL;
tempNode->right = NULL;
if (root == NULL)
// root=tempNode;
printf("NULL");
}
return root;
}
void inOrder(struct Node* root)
{
// Base case
if (root == NULL)
{
return;
}
// Travel the left sub-tree first.
inOrder(root->left);
// Print the current Node value
printf("%d ", root->data);
// Travel the right sub-tree next.
inOrder(root->right);
}
Graph is a non-linear data structure. It contains a set of points known as nodes (or vertices) and a set
of links known as edges (or Arcs). Here edges are used to connect the vertices. A graph is defined as
follows...
Graph is a collection of vertices and arcs in which vertices are connected with arcs or
Graph is a collection of nodes and edges in which nodes are connected with edges.
Example
The following is a graph with 5 vertices and 6 edges. This graph G can be defined as G = ( V , E )
Where V = {A,B,C,D,E} and E = {(A,B),(A,C)(A,D),(B,D),(C,D),(B,E),(E,D)}.
Graph Terminology
We use the following terms in graph data structure...
Vertex
Individual data element of a graph is called as Vertex. Vertex is also known as node. In above example
graph, A, B, C, D & E are known as vertices.
Edge
An edge is a connecting link between two vertices. Edge is also known as Arc. An edge is represented
as (startingVertex, endingVertex). For example, in above graph the link between vertices A and B is
represented as (A,B). In above example graph, there are 7 edges (i.e., (A,B), (A,C), (A,D), (B,D), (B,E),
(C,D),(D,E)).
Edges are three types.
1. Undirected Edge - An undirected egde is a bidirectional edge. If there is undirected edge
between vertices A and B then edge (A , B) is equal to edge (B , A).
2. Directed Edge - A directed egde is a unidirectional edge. If there is directed edge between
vertices A and B then edge (A , B) is not equal to edge (B , A).
3. Weighted Edge - A weighted egde is a edge with value (cost) on it.
Undirected Graph
A graph with only undirected edges is said to be undirected graph.
Directed Graph
A graph with only directed edges is said to be directed graph.
Mixed Graph
A graph with both undirected and directed edges is said to be mixed graph.
Destination
If a edge is directed, its first endpoint is said to be the origin of it and the other endpoint is said to be
the destination of that edge.
Adjacent
If there is an edge between vertices A and B then both A and B are said to be adjacent. In other words,
vertices A and B are said to be adjacent if there is an edge between them.
Incident
Edge is said to be incident on a vertex if the vertex is one of the endpoints of that edge.
Outgoing Edge
A directed edge is said to be outgoing edge on its origin vertex.
Incoming Edge
A directed edge is said to be incoming edge on its destination vertex.
Degree
Total number of edges connected to a vertex is said to be degree of that vertex.
Indegree
Total number of incoming edges connected to a vertex is said to be indegree of that vertex.
Outdegree
Total number of outgoing edges connected to a vertex is said to be outdegree of that vertex.
Self-loop
Edge (undirected or directed) is a self-loop if its two endpoints coincide with each other.
Simple Graph
A graph is said to be simple if there are no parallel and self-loop edges.
Path
A path is a sequence of alternate vertices and edges that starts at a vertex and ends at other vertex such
that each edge is incident to its predecessor and successor vertex.
8. GRAPH REPRESENTATIONS
In this representation, the graph is represented using a matrix of size total number of vertices by a total
number of vertices. That means a graph with 4 vertices is represented using a matrix of size 4X4. In this
matrix, both rows and columns represent vertices. This matrix is filled with either 1 or 0. Here, 1
represents that there is an edge from row vertex to column vertex and 0 represents that there is no
edge from row vertex to column vertex.
For example, consider the following undirected graph representation...
Incidence Matrix
In this representation, the graph is represented using a matrix of size total number of vertices by a total
number of edges. That means graph with 4 vertices and 6 edges is represented using a matrix of size
4X6. In this matrix, rows represent vertices and columns represents edges. This matrix is filled with 0
or 1 or -1. Here, 0 represents that the row edge is not connected to column vertex, 1 represents that the
row edge is connected as the outgoing edge to column vertex and -1 represents that the row edge is
connected as the incoming edge to column vertex.
In this representation, every vertex of a graph contains list of its adjacent vertices.
For example, consider the following directed graph representation implemented using linked list.
9. GRAPH TRAVERSAL
Graph traversal is a technique used for a searching vertex in a graph. The graph traversal is also used
to decide the order of vertices is visited in the search process. A graph traversal finds the edges to be
used in the search process without creating loops. That means using graph traversal we visit all the
vertices of the graph without getting into looping path.
There are two graph traversal techniques and they are as follows...
1. DFS (Depth First Search)
2. BFS (Breadth First Search)
Example
BFS (Breadth First Search)
BFS traversal of a graph produces a spanning tree as final result. Spanning Tree is a graph without
loops. We use Queue data structure with maximum size of total number of vertices in the graph to
implement BFS traversal.
2. Transportation networks. In road networks vertices are intersections and edges are the road
segments between them, and for public transportation networks vertices are stops and edges are
the links between them. Such networks are used by many map programs such as Google maps,
Bing maps and now Apple IOS 6 maps to find the best routes between locations. They are also
used for studying traffic patterns, traffic light timings, and many aspects of transportation.
3. Utility graphs. The power grid, the Internet, and the water network are all examples of graphs
where vertices represent connection points, and edges the wires or pipes between them.
Analyzing properties of these graphs is very important in understanding the reliability of such
utilities under failure or attack, or in minimizing the costs to build infrastructure that matches
required demands.
4. Document link graphs. The best known example is the link graph of the web, where each web
page is a vertex, and each hyperlink a directed edge. Link graphs are used, for example, to analyze
relevance of web pages, the best sources of information, and good link sites.
5. Protein-protein interactions graphs. Vertices represent proteins and edges represent
interactions between them that carry out some biological function in the cell. These graphs can be
used, for example, to study molecular pathways—chains of molecular interactions in a cellular
process. Humans have over 120K proteins with millions of interactions among them.
6. Network packet traffic graphs. Vertices are IP (Internet protocol) addresses and edges are the
packets that flow between them. Such graphs are used for analyzing network security, studying
the spread of worms, and tracking criminal or non-criminal activity.
7. Scene graphs. In graphics and computer games scene graphs represent the logical or spacial
relationships between objects in a scene. Such graphs are very important in the computer games
industry.
8. Finite element meshes. In engineering many simulations of physical systems, such as the flow of
air over a car or airplane wing, the spread of earthquakes through the ground, or the structural
vibrations of a building, involve partitioning space into discrete elements. The elements along
with the connections between adjacent elements forms a graph that is called a finite element
mesh.
9. Robot planning. Vertices represent states the robot can be in and the edges the possible
transitions between the states. This requires approximating continuous motion as a sequence of
discrete steps. Such graph plans are used, for example, in planning paths for autonomous vehicles.
10. Neural networks. Vertices represent neurons and edges the synapses between them. Neural
networks are used to understand how our brain works and how connections change when we
learn. The human brain has about 1011 neurons and close to 1015 synapses.