Professional Documents
Culture Documents
DS Unit 2
DS Unit 2
: 2012 2013
Semester: I
Prepared By: Mrs. V.Rekha, MCA, M.Phil., Ph.D.,
Subject Incharge
HOD
Principal
UNIT II TREES
Binary Trees Operations on binary trees - Binary Tree Representations node
representation, internal and external nodes, implicit array representation Binary tree
Traversals - Huffman Algorithm Representing Lists as Binary Trees
Part - A
A tree is a finite set of elements or nodes. If the set is non-empty, one of the nodes is distinguished
as the root node, while the remaining (possibly empty) set of nodes are grouped into subsets, each of
which is itself a tree. This hierarchical relationship is described by referring to each such sub-tree as a
child of the root, while the root is referred to as the parent of each sub-tree. If a tree consists of a single
node, that node is called a leaf node.
2. Define Path.
A path is a sequence of nodes in which each node is adjacent to the next one. Every node in the
tree can be reached by following a unique path starting from the root.
3. How to find the height of a tree?
The height or length of the tree is the level of the leaf in the longest path from the root plus 1.
By definition, the height of an empty tree is -1.
4. What is meant by Subtrees?
A tree may be divided into subtrees. A subtree is any connected structure below the root. The first node
in a subtree is known as the root of the subtree and is used to name the subtree.
5. What is Binary Trees?
A binary tree is a tree in which no node can have more than two subtrees. These subtrees are designated
as the left subtree and right subtree. Each subtree is a binary tree itself.
C
Right Subtree
Left Subtree
A tree with a maximum height is rare. It occurs when the entire tree is built in one direction. The
minimum height of the tree, Hmin is determined by,
Hmin = Log2 N + 1
8. What is the purpose of balance factor?
To determine whether tree is balanced, the balance factor should be calculated.
If HL represents the height of the left subtree and H R represents the height of the right subtree
then Balance factor,
B = HL HR
A tree is balanced if its balance factor is 0 and its subtrees are also balanced.
A binary tree is balanced if the height of its subtrees differs by no more than one and its subtrees
are also balanced.
4
14. What are general approaches to the traversal sequence?
o Depth first traversal
o Breadth first traversal
15. What is DFS?
Depth first traversal, the processing proceeds along a path from the root through one child to the
most distant descendent of that first child before processing a second child. In other words, in the depth
first traversal, all the descendants of a child are processed before going to the next child.
16. Write down the steps to calculate the Inorder Traversal
Traverse left subtree in inorder
Process root node
Traverse right subtree in inorder
17. Write down the steps to calculate the Preorder Traversal
Process root node
Traverse left subtree in preorder
Traverse right subtree in preorder
18. Write down the steps to calculate the Postorder Traversal
Traverse left subtree in postorder
Traverse right subtree in postorder
Process root node
6
The node to be deleted can fall into any one of the following categories;
1. Node may not have any children ( ie, it is a leaf node)
2. Node may have only on child ( either left / right child)
3. Node may have two children ( both left and right)
28. Define Threaded binary tree.
In binary trees, left and right child pointers of all leaf nodes(empty subtrees) are set to NULL while
traversing the tree. Normally, a stack is maintained to hold the successor of the node in traversal.
Replacing such NULL pointers with pointers to successor in traversal could eliminate the use of stack.
These pointers are called as threads, and such a tree is called threaded binary tree.
29. What is called as right in-threaded binary tree?
If right child pointers nodes with empty right subtree, may be made to point its successor then the
tree is called right in-threaded binary trees.
30. What is called as left in-threaded binary tree?
If left child pointers nodes with empty left subtree, may be made to point its successor then the
tree is called left in-threaded binary trees.
31. How to implementing a right in-threaded binary tree?
To implement right in-threaded binary tree we need info, left , right and an extra logical field
rthread is included within each node to indicate whether or not its right pointer is a thread.
lchild
info
rchild
isthread
7
4. D34. This way, the nodes with the highest weight will be near the top of the tree, and have shorter
codes.
35. Define internal and external node.
The internal path length of a tree is the sum of all lengths of all paths from each internal node to
the root
The external path length of a tree is the sum of all lengths of all paths from each external node to
the root
*
A
*
+
B
C
/
D
37. Write the difference between strictly binary tree and complete binary tree.
Complete binary tree is a binary tree in which all the levels must be filled from the left to right.
After filling one level then only we can move on to the next level. Full and Complete binary trees
are different. All full binary trees are complete binary trees but not vice versa.
Strictly Binary Tree: Here each will have exactly two child nodes except the leaf nodes
38. What is the maximum number of nodes in a binary tree of depth k?
The max. no. of nodes in a binary tree of depth k is 2k-1.
Proof:
Max. no. of nodes in a binary tree of depth k =
= 20 + 21 + 22 + + 2k-1
= 2k 1
39. What are the different representations of nodes in the tree? [UQ Jan 2010]
Array Representation
Linked List Representation
40. Show that in a complex binary tree, the total number of edges is given by 2(n t 1) where
nt is the total number of terminal nodes.
[UQ Jan 2012]
9
Begin
End
End
44. Draw the linked representation for the following binary tree? [UQ Jan 2010]
10
A binary tree is a tree in which no node can have more than two subtrees.
These subtrees are designated as the left subtree and right subtree.
Each subtree is a binary tree itself.
A
B
C
Right Subtree
Left Subtree
The height of the binary trees can be mathematically predicted. The maximum height of the
binary tree which has N nodes,
Hmax = N
A tree with a maximum height is rare. It occurs when the entire tree is built in one direction. The
minimum height of the tree, Hmin is determined by,
Hmin = Log2 N + 1
Given a height of the binary tree, H, the minimum and maximum number of nodes in the tree are
given as,
Nmin = H
and,
Nmax = 2H 1
If the height of the tree is less, then it is easier to locate any desired node in the tree.
To determine whether tree is balanced, the balance factor should be calculated.
If HL represents the height of the left subtree and H R represents the height of the right subtree
then Balance factor,
B = HL HR
11
A tree is balanced if its balance factor is 0 and its subtrees are also balanced.
A binary tree is balanced if the height of its subtrees differs by no more than one and its subtrees
are also balanced.
A complete tree has the maximum number of entries for its height.
The maximum number is reached when the least level is full. The maximum number is reached
when the last level is full.
B
D
C
E
A tree is considered nearly complete if it has the minimum height for its nodes and all nodes in
the last level are found on the left.
A
B
A
C
A binary tree is a tree which is either empty, or one in which every node:
has no children; or
12
Level 3
A very simple representation for such binary tree results from sequentially numbering the nodes,
starting with nodes on level 1 then those on level 2 and so on. Nodes on any level are numbered from left
to right as shown in the above picture.
This numbering scheme gives us the definition of a complete binary tree. A binary tree with n
nodes and of depth K is complete if its nodes correspond to the nodes which are numbered one to n in the
full binary tree of depth K.
Array Representation:
Each node contains info, left, right and father fields. The left, right and father fields of a node point
to the nodes left son, right son and father respectively.
Using the array implementation, we may declare,
#define NUMNODES 100
struct nodetype
{
int info;
int left;
int right;
int father;
};
struct nodetype node[NUMNODES];
This representation is called linked array representation.
Under this representation,
The operations,
o
o
o
Example: -
respectively.
13
Fig (a)
Fig (b)
E
The above representation appears to be good for complete binary trees and wasteful for many
other binary trees. In addition, the insertion or deletion of nodes from the middle of a tree requires the
insertion of many nodes to reflect the change in level number of these nodes.
3. How the binary tree is representation in linked list? Describe briefly.
The problems of sequential representation can be easily overcome through the use of a linked
representation. Each node will have three fields LCHILD, DATA and RCHILD as represented below
LCHILD
DATA
RCHILD
Fig (a)
Fig (b)
In most applications it is adequate. But this structure makes it difficult to determine the parent of
a node since this leads only to the forward movement of the links.
14
Using the linked implementation,
we may declare,
stuct nodetype
{
int info;
struct nodetype *left;
struct nodetype *right;
struct nodetype *father;
};
typedef struct nodetype *NODEPTR;
This representation is called dynamic node representation.
4. List out the Primitive Operations on binary trees with separate examples?
(1) maketree() function
Which allocates a node and sets it as the root of a single-node binary tree, may be written as
follows;
NODEPTR maketree(x)
int x;
{
NODEPTR p;
p = getnode();
pinfo = x;
pleft = NULL;
pright=NULL;
return(p);
}
15
}
A binary tree traversal requires that each node of the tree be processed once and only once in a
predetermined sequence.
o
o
In depth first traversal, the processing proceeds along a path from the root through one child to
the most distant descendent of that first child before processing a second child. In other words,
in the depth first traversal, all the descendants of a child are processed before going to the next
child.
In a breadth-first traversal, the processing proceeds horizontally form the root to all its children,
then to its childrens children, and so forth until all nodes have been processed.
In other words, in breadth traversal, each level is completely processed before the next level is
started.
Depth-First Traversal
Breadth-First Traversal
16
5. Explain about inorder, preorder & post order with separate examples and algorithms.
[UQ Jun 2010 & Jan 2012]
There are basically three ways of binary tree traversals. They are:
1. Pre Order Traversal
2. In Order Traversal
3. Post Order Traversal
In C, each node is defined as a structure of the following form:
struct node
{
int info;
struct node *lchild;
struct node *rchild;
}
typedef struct node NODE;
Binary Tree Traversals
( Recursive procedure )
1. Inorder Traversal
Algorithm
Algorithm inoder traversal (Bin-Tree T)
Begin
If ( not empty (T) ) then
Begin
End
End
17
The Output is : C B D A E F
2. Preorder Traversal
Algorithm
Algorithm preorder traversal (Bin-Tree T)
Begin
If ( not empty (T) ) then
Begin
Print ( info ( T ) ) / * process node * /
Preoder traversal (left subtree ( T ) )
Inorder traversal ( right subtree ( T ) )
End
End
Output is : A B C D E F
3. Postorder Traversal
Algorithm
Algorithm postorder traversal (Bin-Tree T)
18
Begin
If ( not empty (T) ) then
Begin
Postorder_traversal ( left subtree ( T ) )
Postorder_traversal ( right subtree( T))
Print ( Info ( T ) ) / * process node */
End
End
The Output is : C D B F E A
19
20
21
if(number = = info(p) )
printf( %d %s , number, is a duplicate);
else if ( number < info(p) )
setleft( p, number );
else
setright(p, number);
}
(2) Sort the number in Ascending Order:
If a binary search tree is traversed in inorder(left,root,right) and the contents of each node are
printed as the node is visited, the numbers are printed in ascending order.
For convince the above binary search tree if it is traversed inorder manner the result order is,
30, 46, 50, 58, 60, 70, 77 and 80 is ascending order sequence.
(3)Expression Tree
Representing an expression containing operands and binary operators by a strictly binary tree. The
root of the strictly binary tree contains an operator that is to be applied to the results of evaluating the
expressions represented by the left and right subtrees. A node representing an operator is a nonleaf,
whereas a node representing an operand in a leaf.
9. Explain the operations of binary search tree with separate algorithm.
The basic operation on a binary search tree(BST) include, creating a BST, inserting an element into
BST, deleting an element from BST, searching an element and printing element of BST in ascending order.
The ADT specification of a BST:
ADT BST
{
Create BST()
Insert(elt)
:
:
22
Search(elt,x)
FindMin()
FindMax()
Ordered Output()
Delete(elt,x)
}
a. Inserting an element into Binary Search Tree
Algorithm InsertBST(int elt, NODE *T)
[ elt is the element to be inserted and T is the pointer to the root of the tree]
If (T= = NULL) then
Create a one-node tree and return
Else if (elt<key) then
InsertBST(elt, Tlchild)
Else if(elt>key) then
InsertBST(elt, Trchild)
Else
element is already exist
return T
End
C coding to Insert element into a BST
struct node
{
int info;
struct node *lchild;
struct node *rchild;
};
typedef stuct node NODE;
NODE *InsertBST(int elt, NODE *T)
{
if(T = = NULL)
{
T = (NODE *)malloc(sizeof(NODE));
if ( T = = NULL)
printf ( No memory error);
else
{
tinfo = elt;
tlchild = NULL;
trchild = NULL;
}
}
else if ( elt < Tinfo)
tlchild = InsertBST(elt, tlchild);
else if ( elt > Tinfo)
23
trchild = InsertBST( elt, trchild);
return T;
}
b. Searching an element in BST
Searching an element in BST is similar to insertion operation, but they only return the pointer to
the node that contains the key value or if element is not, a NULL is return;
Searching start from the root of the tree;
If the search key value is less than that in root, then the search is left subtree;
If the search key value is greater than that in root, then the search is right subtree;
This searching should continue till the node with the search key value or null pointer(end of the
branch) is reached.
In case null pointer(null left/righ chile) is reached, it is an indication of the absence of the node.
Algorithm SearchBST(int elt, NODE *T)
[ elt is the element to be inserted and T is the pointer to the root of the tree]
1. If (T= = NULL) then
Return NULL
2. If (elt<key) then
return SearchBST(elt, Tlchild)
Else if(elt>key) then
return SerachBST(elt, Trchild)
Else
return T
End
NODE * SearchBST(int elt, NODE *T)
{
if(T = = NULL)
return NULL;
24
else
return FindMin(Tlchild)
3. End
NODE * FindMin( NODE *T )
{
if(T = = NULL)
return NULL;
if ( Tlchild = = NULL)
return tree;
else
return FindMin(Treelchild);
}
25
print Element is not found
2. If elt is less than info(Tree) then
locate element in left subtree and delete it
else if elt is greater than info(Tree) then
locate element in right subtree and delete it
else if (both left and right child are not NULL) then
/* node with two children */
begin
Locate minimum element in the right subtree
Replace elt by this value
Delete min element in right subtree and move the remaining tree as its
right child
end
else
if leftsubtree is Null then
/* has only right subtree or both subtree Null */
replace node by its rchild
else
if right subtree is Null then
replace node by its left child\
end
free memory allocated to min node
end
return Tree
End
NODE *DeleteBST(int elt, NODE * T)
{
NODE * minElt;
if(T = = NULL)
printf( element not found \n);
else if ( elt < Tinfo)
Tlchild = DeleteBST(elt, Tlchild);
else if ( elt > Tinfo)
Trchild = DeleteBST(elt, Trchild);
else
if(Tlchild && T rchild)
{
minElt = FindMin(Trchild);
Tinfo = minEltinfo;
Trchild = DeleteBST(Tinfo, Trchild);
}
else
{
minElt = Tree;
if (Tlchild = = NULL)
T = Trchild;
else if ( Trchild = = NULL)
T = Tlchild;
Free (minElt);
}
return T;
}
26
10. Write a short notes on Threaded Binary Tree.
A binary tree is threaded by making all right child pointers that would normally be null point to the
inorder successor of the node, and all left child pointers that would normally be null point to the inorder
prededessor of the node.
In binary trees, left and right child pointers of all leaf nodes(empty subtrees) are set to NULL while
traversing the tree. Normally, a stack is maintained to hold the successor of the node in traversal.
Replacing such NULL pointers with pointers to successor in traversal could eliminate the use of stack.
These pointers are called as threads, and such a tree is called threaded binary tree.
If right child pointers nodes with empty right subtree, may be made to point its successor then the
tree is called right in-threaded binary trees.
If left child pointers nodes with empty left subtree, may be made to point its successor then the
tree is called left in-threaded binary trees.
Right in-threaded Binary Trees.(150) 1.17
Note : The last node in the tree not threaded. In example F is at rightmost and not threaded.
Implementing a right in-threaded binary tree:
To implement right in-threaded binary tree we need info, left , right and an extra logical field
rthread is included within each node to indicate whether or not its right pointer is a thread.
lchild
info
rchild
isthread
27
{
q = p;
p = p left;
}
if(q ! = NULL)
{
printf(%d \n,qinfo);
p = q right;
while(qrthread && p!=NULL)
{
printf(%d \n, p info);
q = p;
p = pright;
}
}
}while(q! = NULL);
}
intrav3(tree)
NODEPTR tree;
{
NODEPTR q, p;
q = NULL;
p = tree;
do
{
while(p!=NULL)
{
q = p;
p = p left;
}
if(q ! = NULL)
{
printf(%d \n, qinfo);
p = qright;
}
while( q ! = NULL && p = = NULL )
{
do
{
/* node(q) has no right son. Back up until a left son or the tree root is
encountered */
p = q;
q = pfather;
}while( ! isleft(p) && q ! = NULL);
if ( q ! = NULL)
{
printf(%d \n,qinfo);
p = qright;
}
}/* end while */
} while (q ! = NULL);
28
}
11. Write the algorithm for Heterogeneous Binary Trees
Information contained in different nodes of binary tree is of different type. Such a tree is called
Heterogeneous Binary Tree. To represent such a tree in C we may use a union as follows:
#define OPERATOR 0
#define OPERAND 1
struct nodetype
{
short int utype; / * operator or operand */
union
{
char chinfo;
float numinfo;
} info;
struct nodetype *left;
struct nodetype *right;
};
typedef struct nodetype *NODEPTR;
float evalbintree (tree)
NODEPTR tree;
{
float opnd1,opnd2;
char symb;
if( treeutype = = OPERAND)
return(treenuminfo);
/* treeutype = = OPERATOR */
opnd1 = evalbintree(treeleft); /* evaluate the left subtree */
opnd2 = evalbintree(treeright); /* evaluate the right subtree */
symb = treechinfo;
/* extract the operator */
/* apply the operator and return the result */
return oper(symb,opnd1,opnd2);
}
12. Explain about Huffman Tree with an algorithm and example. [UQ Jan 2012 & Jun 2010]
Huffman tree are used for developing an optimal encoding scheme for the given frequency of
occurrence of each symbol in a message (string). Find the two symbols that appear least frequency and
assigned them with different bit using 0s and 1s. And combine these two symbols whose code represents
the knowledge that a symbol is either 0 or 1 frequency. Such a way the Huffman tree is constructing for
remaining symbols in the given message
Once the Huffman tree is constructed, the code of any symbol in the alphabet can be constructed
by starting at the leaf representing that symbol and Climbing Up to the root. Initially the code is assigned
to NULL. Each time a left branch is climbed 0 is appended to the beginning of the code; each time a
right branch is climbed 1 is appended to the beginning of the code.
29
To read the codes from a Huffman tree, start from the root and add a '0' every time you go left to a
child, and add a '1' every time you go right.
Then, repeat these steps until there is only one node left:
This way, the nodes with the highest weight will be near the top of the tree, and have shorter codes.
HUFFMAN ALGORITHM
30
}
/* the tree is now constructed; use it to find codes */
root = pqmindelete(rootnodes);
for( i=0; i<n; i++)
{
p = position [i];
code[i] = the null bit string;
while( p ! = root )
{
/* travel up the tree */
if( isleft(p) )
code[i] = 0 followed by code[i];
else
code[i] = 1 followed by code[i];
p = father(p);
}
}
13. Explain the various representation of binary tree in detail with suitable example.
[UQ Jan 2010]
A tree is a finite set of elements or nodes. If the set is non-empty, one of the nodes is distinguished
as the root node, while the remaining (possibly empty) set of nodes are grouped into subsets, each of
which is itself a tree. This hierarchical relationship is described by referring to each such subtree as a child
of the root, while the root is referred to as the parent of each subtree. If a tree consists of a single node,
that node is called a leaf node.
A simple tree.
Basic Tree Concepts
A tree consists of a finite set of elements, called nodes, and a finite set of directed lines, called
branches, that connect the nodes.
The number of branches associated with a node is the degree of the node.
31
o
o
o
When the branch is directed toward a node, it is an indegree branch; when the branch is
directed away from the node, it is an outdegree branch.
The sum of indegree and outdegree branches is the degree of the node.
The indegree of the root is by definition is zero.
Root
Level 0
Internal Nodes
Level 1
Level 2
Level 3
Branch
C
D
Leaf
Siblings
Sub Tree
Parents
Children
Siblings
Leaves
Length
:
:
:
:
:
A, B, C, G
B, F, G, C, H, I, J, D, E
{ B, F, G }, { D, E }, { H, I, J }
F, D, E, H, I, J
4
A path is a sequence of nodes in which each node is adjacent to the next one.
Every node in the tree can be reached by following a unique path starting from the root.
The level of a node is its distance from the root. Because the root has a zero distance from itself,
the root is at level 0. The children of the root are at the level 1.
The height or length of the tree is the level of the leaf in the longest path from the root plus 1. By
definition, the height of an empty tree is -1.
A tree may be divided into subtrees. A subtree is any connected structure below the root.
The first node in a subtree is known as the root of the subtree and is used to name the subtree.
32
Anna University
Part -A
1. What are the different representations of nodes in the tree?
2. Show that in a complex binary tree, the total number of edges is given by 2(nt 1) where nt is the
total number of terminal nodes.
[Ref. No.: 2]
2. Explain about inorder, preorder & post order with separate examples and algorithms.
[Ref. No.: 5]
4. Explain the various representation of binary tree in detail with suitable example.