Unit IV
Unit IV
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. A tree data structure can be defined as follows...
Example:
Operations on tree:
1. Insertion
2. Deletion
3. Traversal
4. Searching.
Terminology
In a tree data structure, we use the following 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 (Step).
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 edges 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.
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.
Everynode in the tree should have atmost 2 children.
In a binary tree, every node can have either 0 children or 1 child or 2
children but not more than 2 children.
Example:
Array Representation
Linked List Representation
Consider the following binary tree...
In a tree if a node is at i position, then its left child will be at 2i+1 and right
child will be at 2i+2 position.
2. Linked List Representation of Binary Tree
We use a double linked list to represent a binary tree. In a double linked list, every node consists of
three fields. First field for storing left child address, second for storing actual data and third for
storing right child address.
In this linked list representation, a node has the following structure...
The above example of the binary tree represented using Linked list representation is shown 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
A binary tree in which every internal node has exactly two children and all leaf nodes are at
same level is called Complete Binary Tree.
In a left skewed tree, most of the nodes have the left child without
corresponding right child.
In a right skewed tree, most of the nodes have the right child without
corresponding left child.
Every node must have two children in all levels except in last level but filled
from left to right.
Advantages of Trees
Trees are so useful and frequently used, because they have some very serious
advantages:
the order of nodes basing on their values. In a binary tree, the elements are arranged in the order
they arrive at the tree from top to bottom and left to right.
To enhance the performance of binary tree, we use a special type of binary tree known as Binary
Search Tree. Binary search tree mainly focuses on the search operation in a binary tree. Binary
Binary Search Tree is a binary tree in which every node contains only smaller values in its
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...
Example
The following 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.
1. Search
2. Insertion
3. Deletion
Step 1 - Create a newNode with given value and set its left and right to NULL.
Step 2 - Check whether tree is Empty.
Step 3 - If the tree is Empty, then set root to newNode.
Step 4 - If the tree is Not Empty, then check whether the value of newNode
is smaller or larger than the node (here it is root node).
Step 5 - If newNode is smaller than or equal to the node then move to its left child. If
newNode is larger than the node then move to its right child.
Step 6- Repeat the above steps until we reach to the leaf node (i.e., reaches to NULL).
Step 7 - After reaching the leaf node, insert the newNode as left child if the newNode
is smaller or equal to that leaf node or else insert it as right child.
Example
Construct a Binary Search Tree by inserting the following sequence of
numbers...
10,12,5,4,20,8,7,15 and 13
Above elements are inserted into a Binary Search Tree as follows...
Heap Data Structure:
A Heap is a special type of tree that follows two properties. These properties
are :
All leaves must be at h or h-1 levels for some h > 0(complete binary tree
property).
The value of the node must be >= (or <=) the values of its children nodes,
known as the heap property.
Consider the pictorial representation shown below:
In the pictures shown above, the leftmost tree denotes a heap (Max Heap) and
the two tree to its right aren't heap as the middle tree violates the first heap
property(not a complete binary tree) and the last tree from the left violates the
second heap property(17 < 19).
Types of Heap
If we consider the properties of a heap, then we can have two types of heaps.
These mainly are:
Min Heap
Max Heap
Min Heap
In this heap, the value of a node must be less than or equal to the values of its
children nodes.
Max Heap
In this heap, the value of a node must be greater than or equal to the values of
its children nodes.
Building a Heap
Let's look at some operations like inserting an element in a heap or deleting
an element from a heap.
1. Inserting an Element :
Building a heap includes adding elements into the heap. Let us consider an
array of elements, namely nums = [10,5,17,4,22]. We want to make a Max
Heap out of these elements, and the way we do that is shown in the pictorial
representation below.
Whenever we add an element while building a heap, it is quite possible that it
will violate one of the properties. We take care of the first heap property by
simply filling each level with maximum nodes and then when we move on to
the next level, we fill the left child first and then the right child. But it is still
possible that we have a violation regarding the second heap property, in that
case we simply bubble up the current element that we have inserted and try to
find the right position of it in the heap. Bubbling up includes swapping the
current element with its parent till the heap is a max heap. In case of a min
heap, we do the same procedure while adding an element to the heap.
The above representation shows three violations in total(17, 22, 22) and in all
these cases we have basically swapped the current node with the parent node,
hence bubbling up. It can also be noted that this process of bubbling up is also
known as sift up.
Now let us look at another example, where we bubble down. Consider the
pictorial representation of a tree(not heap) shown below:
2. Deleting an Element :
Deleting an Element :
Copy the first element of the heap(root) into some variable
Whenever we are deleting an element, we simply delete the root element and
replace it with the last element of the heap(the rightmost child of last level).
We do that as we simply want to maintain the first property, as if we take any
other element out of the heap we won't have a valid complete binary tree. We
then place this node at the root, and it might be possible that this node will not
satisfy the second property of the heap, and hence we bubble down to make it
a valid heap. It can also be noted that this process of bubbling down is also
known as sift down.
Binary heaps are also the main reason of implementing priority queues, as
because of them the several priority queue operations like add(), remove() etc
gets a time complexity of O(n).
They are also the most preferred choice for solving Kth smallest / Kth Largest
element questions.
Deleting an Element:
Deleting an element from a heap includes removing the root node and then
swapping it with the last node of the last level, and then if this new root node
violates any heap property, we need to swap it with the child node, until the
tree is a valid binary heap. Since, in worst case scenarios we might have to
swap this new root node with node at the lower levels to the very bottom(leaf
level), which in turn means the height of the tree, the time complexity of
deleting the node from the binary heap thus in turn is: O(log N).