You are on page 1of 136

Data Structures and Algorithms

Objectives

In this session, you will learn to:


Store data in a tree
Implement a binary tree
Implement a binary search tree

Ver. 1.0 Session 13


Data Structures and Algorithms
Storing Data in a Tree

Directory structure
Consider a scenario where you are required to represent the
directory structure of your operating system.
The directory structure contains various folders and files. A
folder may further contain any number of sub folders and
files.
In such a case, it is not possible to represent the structure
linearly because all the items have a hierarchical
relationship among themselves.
In such a case, it would be good if you have a data structure
that enables you to store your data in a nonlinear fashion.

Ver. 1.0 Session 13


Data Structures and Algorithms
Defining Trees

A tree are
Trees is a used
nonlinear data structure
in applications that represent
in which a between
the relation
hierarchical
data elements relationship among
needs to be the various
represented in adata elements.
hierarchy.

B C D

E F G H I J K

L M

Ver. 1.0 Session 13


Data Structures and Algorithms
Defining Trees (Contd.)

Eachtopmost
The elementnode
in a tree
in a tree
is referred
is called
to root.
as a node.

root

B C D

E F G H I J K

L M node

Ver. 1.0 Session 13


Data Structures and Algorithms
Defining Trees (Contd.)

Each node in a tree can further have subtrees below its


hierarchy.
root

B C D

E F G H I J K

L M node

Ver. 1.0 Session 13


Data Structures and Algorithms
Tree Terminology

Leafusnode:
Let It refers
discuss to aterms
various nodethat
withare
nomost
children.
frequently used
with trees.

A
Nodes E, F, G, H, I, J,
L, and M are leaf
B C D nodes.

E F G H I J K

L M

Ver. 1.0 Session 13


Data Structures and Algorithms
Tree Terminology (Contd.)

Subtree: A
Children ofportion
a node:ofThe
a tree, which
roots can
of the be viewed
subtrees of aas a are
node
separate
called thetree in itself
children is called
of the node.a subtree.
A subtree can also contain just one node called the leaf node.

A
E, F, with
Tree G, and
rootHB,
are
children of nodes
containing node B.E,BF,
B C D is the
G, andparent
H is aof these of
subtree
nodes.
node A.

E F G H I J K

L M

Ver. 1.0 Session 13


Data Structures and Algorithms
Tree Terminology (Contd.)

DegreeA of
Edge: linka from
node:the
It refers
parenttotothe number
a child nodeofissubtrees
referredof
toaas
node
an in a tree.
edge.

A Degree of node C is 1
Degree of node D is 2
B C D Degree of node A is 3
Edge Degree of node B is 4

E F G H I J K

L M

Ver. 1.0 Session 13


Data Structures and Algorithms
Tree Terminology (Contd.)

Siblings/Brothers: It refers to the children of the same


node.

A Nodes B, C, and D are


siblings of each other.
B C D Nodes E, F, G, and H are
siblings of each other.

E F G H I J K

L M

Ver. 1.0 Session 13


Data Structures and Algorithms
Tree Terminology (Contd.)

Internal
Level of node: It refers
a node: to to
It refers anythenode between
distance the rootofand a
(in number
leaf node.
nodes) of a node from the root. Root always lies at level 0.
As you move down the tree, the level increases by one.

Level 0
A
Nodes B, C, D, and K
are internal nodes. Level 1
B C D

E F G H I J K Level 2

L M Level 3

Ver. 1.0 Session 13


Data Structures and Algorithms
Tree Terminology (Contd.)

Depth of a tree: Refers to the total number of levels in the


tree.
The depth of the following tree is 4.

Level 0
A

Level 1
B C D

E F G H I J K Level 2

L M Level 3

Ver. 1.0 Session 13


Data Structures and Algorithms
Just a minute

Consider the following tree and answer the questions that


follow:
a. What is the depth of the tree?
b. Which nodes are children of node B?
c. Which node is the parent of node F?
root
d. What is the level of node E?
e. Which nodes are the siblings of node H?
A
f. Which nodes are the siblings of node D?
g. Which nodes are leaf nodes?
B C

D E F G

H I

Ver. 1.0 Session 13


Data Structures and Algorithms
Just a minute

Answer:
a. 4
b. D and E
c. C
d. 2
e. H does not have any siblings
f. The only sibling of D is E
g. F, G, H, and I

Ver. 1.0 Session 13


Data Structures and Algorithms
Defining Binary Trees

Binary
Strictly tree is atree:
binary specific type of tree in which each node can
have at most
A binary two
tree in children namely
which every node, left child
except forand
the right child.
leaf nodes,
hasare
There non-empty
variousleft and of
types right children.
binary trees:
Strictly binary tree
Full binary tree
Complete binary tree

Ver. 1.0 Session 13


Data Structures and Algorithms
Defining Binary Trees (Contd.)

Full binary tree:


d
A binary tree of depth d that contains exactly 2 1
nodes.

A
Depth = 3
Total number of
3
nodes = 2 1 = 7
B C

D E F G

Ver. 1.0 Session 13


Data Structures and Algorithms
Defining Binary Trees (Contd.)

Complete binary tree:


A binary tree in which all levels, except possibly the deepest
level, are completely filled and at the deepest level, all nodes
are as far left as possible.

A A

B C B C

D E F D E G

Complete Binary Tree Incomplete Binary Tree

Ver. 1.0 Session 13


Data Structures and Algorithms
Representing a Binary Tree

Array representation of binary trees: If there are n nodes in a binary


All the nodes are represented as the tree, then for
elements of any
an node
array.with index
i, where 0 < i < n 1:
Parent of i is at (i 1)/2.
A [0] Left child of i is at 2i + 1:
If 2i + 1 > n 1, then
B [1] the node does not
0 have a left child.
C [2]
Right child of i is at 2i + 2:
A
If 2i + 2 > n 1, then
D [3]
the node does have a
1 2 right child.
E [4]
B C
3 4 5 6 F [5]
D E F G
G [6]

Binary Tree Array Representation

Ver. 1.0 Session 13


Data Structures and Algorithms
Representing a Binary Tree (Contd.)

Linked representation of a binary tree:


It uses a linked list to implement a binary tree.
Each node in the linked representation holds the following
information:
Data
Reference to the left child
Reference to the right child
If a node does not have a left child or a right child or both, the
respective left or right child fields of that node point to NULL.

Data
Node

Ver. 1.0 Session 13


Data Structures and Algorithms
Representing a Binary Tree (Contd.)

root root

. 52 .
52

36 68 . 36 . 68 .

24 59 72 24 59 . 72 .

70 80 . 70 80

Binary Tree Linked Representation

Ver. 1.0 Session 13


Data Structures and Algorithms
Traversing a Binary Tree

You can implement various operations on a binary tree.


A common operation on a binary tree is traversal.
Traversal refers to the process of visiting all the nodes of a
binary tree once.
There are three ways for traversing a binary tree:
Inorder traversal
Preorder traversal
Postorder traversal

Ver. 1.0 Session 13


Data Structures and Algorithms
Inorder Traversal

Steps for traversing a tree in inorder sequence are as


follows:
1. Traverse the left subtree
2. Visit root
3. Traverse the right subtree
Let us consider an example.

Ver. 1.0 Session 13


Data Structures and Algorithms
Inorder Traversal (Contd.)

B is
The left subtree of node A is not
not NULL.
NULL.
Therefore, move to node D B to traverse the left
B.
subtree of A.
root

B C

D E F G

I
H

Ver. 1.0 Session 13


Data Structures and Algorithms
Inorder Traversal (Contd.)

The left subtree of node D is NULL.


Therefore, visit node D.
root

B C

D E F G

I
H

D
Ver. 1.0 Session 13
Data Structures and Algorithms
Inorder Traversal (Contd.)

Right subtree of D is not NULL


Therefore, move to the right subtree of node D
root

B C

D E F G

I
H

D
Ver. 1.0 Session 13
Data Structures and Algorithms
Inorder Traversal (Contd.)

Left subtree of H is empty.


Therefore, visit node H.
root

B C

D E F G

I
H

D H
Ver. 1.0 Session 13
Data Structures and Algorithms
Inorder Traversal (Contd.)

Right subtree of H is empty.


Therefore, move to node B.
root

B C

D E F G

I
H

D H
Ver. 1.0 Session 13
Data Structures and Algorithms
Inorder Traversal (Contd.)

The left subtree of B has been visited.


Therefore, visit node B.
root

B C

D E F G

I
H

D H B
Ver. 1.0 Session 13
Data Structures and Algorithms
Inorder Traversal (Contd.)

Right subtree of B is not empty.


Therefore, move to the right subtree of B.
root

B C

D E F G

I
H

D H B
Ver. 1.0 Session 13
Data Structures and Algorithms
Inorder Traversal (Contd.)

Left subtree of E is empty.


Therefore, visit node E.
root

B C

D E F G

I
H

D H B E
Ver. 1.0 Session 13
Data Structures and Algorithms
Inorder Traversal (Contd.)

Right subtree of E is empty.


Therefore, move to node A.
root

B C

D E F G

I
H

D H B E
Ver. 1.0 Session 13
Data Structures and Algorithms
Inorder Traversal (Contd.)

Left subtree of A has been visited.


Therefore, visit node A.
root

B C

D E F G

I
H

D H B E A
Ver. 1.0 Session 13
Data Structures and Algorithms
Inorder Traversal (Contd.)

Right subtree of A is not empty.


Therefore, move to the right subtree of A.
root

B C

D E F G

I
H

D H B E A
Ver. 1.0 Session 13
Data Structures and Algorithms
Inorder Traversal (Contd.)

Left subtree of C is not empty.


Therefore, move to the left subtree of C.
root

B C

D E F G

I
H

D H B E A
Ver. 1.0 Session 13
Data Structures and Algorithms
Inorder Traversal (Contd.)

Left subtree of F is empty.


Therefore, visit node F.
root

B C

D E F G

I
H

D H B E A F
Ver. 1.0 Session 13
Data Structures and Algorithms
Inorder Traversal (Contd.)

Right subtree of F is empty.


Therefore, move to node C.
root

B C

D E F G

I
H

D H B E A F
Ver. 1.0 Session 13
Data Structures and Algorithms
Inorder Traversal (Contd.)

The left subtree of node C has been visited.


Therefore, visit node C.
root

B C

D E F G

I
H

D H B E A F C
Ver. 1.0 Session 13
Data Structures and Algorithms
Inorder Traversal (Contd.)

Right subtree of C is not empty.


Therefore, move to the right subtree of node C.
root

B C

D E F G

I
H

D H B E A F C
Ver. 1.0 Session 13
Data Structures and Algorithms
Inorder Traversal (Contd.)

Left subtree of G is not empty.


Therefore, move to the left subtree of node G.
root

B C

D E F G

I
H

D H B E A F C
Ver. 1.0 Session 13
Data Structures and Algorithms
Inorder Traversal (Contd.)

Left subtree of I is empty.


Therefore, visit I.
root

B C

D E F G

I
H

D H B E A F C I
Ver. 1.0 Session 13
Data Structures and Algorithms
Inorder Traversal (Contd.)

Right subtree of I is empty.


Therefore, move to node G.
root

B C

D E F G

I
H

D H B E A F C I
Ver. 1.0 Session 13
Data Structures and Algorithms
Inorder Traversal (Contd.)

Visit node G.

root

B C

D E F G

I
H

D H B E A F C I G
Ver. 1.0 Session 13
Data Structures and Algorithms
Inorder Traversal (Contd.)

Right subtree of G is empty.

root

B C
Traversal complete

D E F G

I
H

D H B E A F C I G
Ver. 1.0 Session 13
Data Structures and Algorithms
Preorder Traversal

Steps for traversing a tree in preorder sequence are as


follows:
1. Visit root
2. Traverse the left subtree
3. Traverse the right subtree

Ver. 1.0 Session 13


Data Structures and Algorithms
Preorder Traversal (Contd.)

Perform the preorder traversal of the following tree.

B C

D E F G

I
H

Preorder Traversal: A B D H E C F G I

Ver. 1.0 Session 13


Data Structures and Algorithms
Postorder Traversal

Steps for traversing a tree in postorder sequence are as


follows:
1. Traverse the left subtree
2. Traverse the right subtree
3. Visit the root

Ver. 1.0 Session 13


Data Structures and Algorithms
Postorder Traversal (Contd.)

Perform the postorder traversal of the following tree.

B C

D E F G

I
H

Postorder Traversal: H D E B F I G C A

Ver. 1.0 Session 13


Data Structures and Algorithms
Just a minute

In _________ traversal method, root is processed before


traversing the left and right subtrees.

Answer:
Preorder

Ver. 1.0 Session 13


Data Structures and Algorithms
Implementing a Binary Search Tree

Consider a scenario. SysCall Ltd. is a cellular phone


company with millions of customers spread across the
world. Each customer is assigned a unique identification
number (id). Individual customer records can be accessed
by referring to the respective id. These ids need to be stored
in a sorted manner in such a way so that you can perform
various transactions, such as retrieval, insertion, and
deletion, easily.

Ver. 1.0 Session 13


Data Structures and Algorithms
Implementing a Binary Search Tree (Contd.)

Which datayou
Therefore, structure
need to willimplement
you use toa store the id of the
data structure that
customers?
provides the advantages of both arrays as well as linked
lists.Can you implement an array?
A binarySearch operation
search in an array is
tree combines thefast.
advantages of both
arrays andHowever,
linkedinsertion
lists. and deletion in an array is complex in nature.
In this case, the total number of customer ids to be stored is very
large. Therefore, insertion and deletion will be very time
consuming.
Can you implement a linked list?
Insert and delete operation in a linked is fast.
However, linked lists allow only sequential search.
If you need to access a particular customer id, which is located
near the end of the list, then it would require you to visit all the
preceding nodes, which again can be very time consuming.

Ver. 1.0 Session 13


Data Structures and Algorithms
Defining a Binary Search Tree

The following
Binary search is an is
tree example
a binaryoftree
a binary search
in which tree.
every node
satisfies the following conditions:
All values in the left subtree of a node are less than the value
of the node. 52

All values in the right subtree of a node are greater than the
value of the
36 node. 68

24 44 59 72

40 55

Ver. 1.0 Session 13


Data Structures and Algorithms
Defining a Binary Search Tree (Contd.)

You can implement various operations on a binary search


tree:
Traversal
Search
Insert
Delete

Ver. 1.0 Session 13


Data Structures and Algorithms
Searching a Node in a Binary Search Tree

Search
To operation
search refers value,
for a specific to the you
process
needoftosearching for a
perform the
specified steps:
following value in the tree.
1. Make currentNode point to the root node
2. If currentNode is null:
a. Display Not Found
b. Exit
3. Compare the value to be searched with the value of currentNode.
Depending on the result of the comparison, there can be three
possibilities:
a. If the value is equal to the value of currentNode:
i. Display Found
ii. Exit
b. If the value is less than the value of currentNode:
i. Make currentNode point to its left child
ii. Go to step 2
c. If the value is greater than the value of currentNode:
i. Make currentNode point to its right child
ii. Go to step 2

Ver. 1.0 Session 13


Data Structures and Algorithms
Just a minute

In a binary search tree, all the values in the left subtree of a


node are _______ than the value of the node.

Answer:
smaller

Ver. 1.0 Session 13


Data Structures and Algorithms
Inserting Nodes in a Binary Search Tree

Beforeaninserting
Write a node
algorithm in a the
to locate binary search
position of tree,
a newyou firstto be
node
need to check
inserted whether
in a binary the tree
search tree.is empty or not.
If the tree is empty, make the new node as root.
If the tree is not empty, you need to locate the appropriate
position for the new node to be inserted.
This requires you to locate the parent of the new node to be
inserted.
Once the parent is located, the new node is inserted as the
left child or right child of the parent.
To locate the parent of the new node to be inserted, you
need to implement a search operation in the tree.

Ver. 1.0 Session 13


Data Structures and Algorithms
Inserting Nodes in a Binary Search Tree (Contd.)

1. Mark the root node as currentNode


Algorithm to locate the 2. Make parent point to NULL
parent of the new node to
3. Repeat steps 4, 5, and 6 until currentNode
be inserted. becomes NULL

4. Make parent point to currentNode


root
5. If the value of the new node is less than that of
currentNode:
. 52 .
a. Make currentNode point to its left child

6. If the value of the new node is greater than that


. 36 . 68 . of currentNode:

a. Make currentNode point to its right child

24 59 . 72 .

. 70 80

Ver. 1.0 Session 13


Data Structures and Algorithms
Inserting Nodes in a Binary Search Tree (Contd.)

1. Mark the root node as currentNode


Refer to the algorithm to
Locate the position of a new node 55. 2. Make parent point to NULL
locate the parent of the
3. Repeat steps 4, 5, and 6 until currentNode
new node to be inserted. becomes NULL

4. Make parent point to currentNode


root
5. If the value of the new node is less than that of
currentNode:
. 52 .
a. Make currentNode point to its left child

6. If the value of the new node is greater than that


. 36 . 68 . of currentNode:

a. Make currentNode point to its right child

24 59 . 72 .

. 70 80

Ver. 1.0 Session 13


Data Structures and Algorithms
Inserting Nodes in a Binary Search Tree (Contd.)

1. Mark the root node as currentNode

Locate the position of a new node 55. 2. Make parent point to NULL

3. Repeat steps 4, 5, and 6 until currentNode


becomes NULL

4. Make parent point to currentNode


root
5. If the value of the new node is less than that of
currentNode:
currentNode . 52 .
a. Make currentNode point to its left child

6. If the value of the new node is greater than that


. 36 . 68 . of currentNode:

a. Make currentNode point to its right child

24 59 . 72 .

. 70 80

Ver. 1.0 Session 13


Data Structures and Algorithms
Inserting Nodes in a Binary Search Tree (Contd.)

1. Mark the root node as currentNode

Locate the position of a new node 55. 2. Make parent point to NULL

3. Repeat steps 4, 5, and 6 until currentNode


becomes NULL

4. Make parent point to currentNode


root
parent = NULL 5. If the value of the new node is less than that of
currentNode:
currentNode . 52 .
a. Make currentNode point to its left child

6. If the value of the new node is greater than that


. 36 . 68 . of currentNode:

a. Make currentNode point to its right child

24 59 . 72 .

. 70 80

Ver. 1.0 Session 13


Data Structures and Algorithms
Inserting Nodes in a Binary Search Tree (Contd.)

1. Mark the root node as currentNode

Locate the position of a new node 55. 2. Make parent point to NULL

3. Repeat steps 4, 5, and 6 until currentNode


becomes NULL

4. Make parent point to currentNode


root
parent = NULL 5. If the value of the new node is less than that of
currentNode:
currentNode . 52 .
a. Make currentNode point to its left child

6. If the value of the new node is greater than that


. 36 . 68 . of currentNode:

a. Make currentNode point to its right child

24 59 . 72 .

. 70 80

Ver. 1.0 Session 13


Data Structures and Algorithms
Inserting Nodes in a Binary Search Tree (Contd.)

1. Mark the root node as currentNode

Locate the position of a new node 55. 2. Make parent point to NULL

3. Repeat steps 4, 5, and 6 until currentNode


becomes NULL

4. Make parent point to currentNode


root
parent
parent= NULL 5. If the value of the new node is less than that of
currentNode:
currentNode . 52 .
a. Make currentNode point to its left child

6. If the value of the new node is greater than that


. 36 . 68 . of currentNode:

a. Make currentNode point to its right child

24 59 . 72 .

. 70 80

Ver. 1.0 Session 13


Data Structures and Algorithms
Inserting Nodes in a Binary Search Tree (Contd.)

1. Mark the root node as currentNode

Locate the position of a new node 55. 2. Make parent point to NULL

3. Repeat steps 4, 5, and 6 until currentNode


becomes NULL
55 > 52
4. Make parent point to currentNode
root
parent 5. If the value of the new node is less than that of
currentNode:
currentNode . 52 .
a. Make currentNode point to its left child

6. If the value of the new node is greater than that


. 36 . 68 . of currentNode:

a. Make currentNode point to its right child

24 59 . 72 .

. 70 80

Ver. 1.0 Session 13


Data Structures and Algorithms
Inserting Nodes in a Binary Search Tree (Contd.)

1. Mark the root node as currentNode

Locate the position of a new node 55. 2. Make parent point to NULL

3. Repeat steps 4, 5, and 6 until currentNode


becomes NULL
55 > 52
4. Make parent point to currentNode
root
parent 5. If the value of the new node is less than that of
currentNode:
currentNode . 52 .
a. Make currentNode point to its left child

6. If the value of the new node is greater than that


. 36 . 68 . of currentNode:

a. Make currentNode point to its right child

24 59 . 72 .

. 70 80

Ver. 1.0 Session 13


Data Structures and Algorithms
Inserting Nodes in a Binary Search Tree (Contd.)

1. Mark the root node as currentNode

Locate the position of a new node 55. 2. Make parent point to NULL

3. Repeat steps 4, 5, and 6 until currentNode


becomes NULL
55 > 52
4. Make parent point to currentNode
root
parent 5. If the value of the new node is less than that of
currentNode:
currentNode . 52 .
a. Make currentNode point to its left child
currentNode
6. If the value of the new node is greater than that
. 36 . 68 . of currentNode:

a. Make currentNode point to its right child

24 59 . 72 .

. 70 80

Ver. 1.0 Session 13


Data Structures and Algorithms
Inserting Nodes in a Binary Search Tree (Contd.)

1. Mark the root node as currentNode

Locate the position of a new node 55. 2. Make parent point to NULL

3. Repeat steps 4, 5, and 6 until currentNode


becomes NULL

4. Make parent point to currentNode


root
parent 5. If the value of the new node is less than that of
currentNode:
. 52 .
a. Make currentNode point to its left child
currentNode
6. If the value of the new node is greater than that
. 36 . 68 . of currentNode:

a. Make currentNode point to its right child

24 59 . 72 .

. 70 80

Ver. 1.0 Session 13


Data Structures and Algorithms
Inserting Nodes in a Binary Search Tree (Contd.)

1. Mark the root node as currentNode

Locate the position of a new node 55. 2. Make parent point to NULL

3. Repeat steps 4, 5, and 6 until currentNode


becomes NULL

4. Make parent point to currentNode


root
parent 5. If the value of the new node is less than that of
currentNode:
. 52 .
a. Make currentNode point to its left child
parent currentNode
6. If the value of the new node is greater than that
. 36 . 68 . of currentNode:

a. Make currentNode point to its right child

24 59 . 72 .

. 70 80

Ver. 1.0 Session 13


Data Structures and Algorithms
Inserting Nodes in a Binary Search Tree (Contd.)

1. Mark the root node as currentNode

Locate the position of a new node 55. 2. Make parent point to NULL

3. Repeat steps 4, 5, and 6 until currentNode


becomes NULL
55 < 68
4. Make parent point to currentNode
root
5. If the value of the new node is less than that of
currentNode:
. 52 .
a. Make currentNode point to its left child
parent currentNode
6. If the value of the new node is greater than that
. 36 . 68 . of currentNode:

a. Make currentNode point to its right child

24 59 . 72 .

. 70 80

Ver. 1.0 Session 13


Data Structures and Algorithms
Inserting Nodes in a Binary Search Tree (Contd.)

1. Mark the root node as currentNode

Locate the position of a new node 55. 2. Make parent point to NULL

3. Repeat steps 4, 5, and 6 until currentNode


becomes NULL
55 < 68
4. Make parent point to currentNode
root
5. If the value of the new node is less than that of
currentNode:
. 52 .
a. Make currentNode point to its left child
parent currentNode
6. If the value of the new node is greater than that
. 36 . 68 . of currentNode:

a. Make currentNode point to its right child

24 59 . 72 .
currentNode
. 70 80

Ver. 1.0 Session 13


Data Structures and Algorithms
Inserting Nodes in a Binary Search Tree (Contd.)

1. Mark the root node as currentNode

Locate the position of a new node 55. 2. Make parent point to NULL

3. Repeat steps 4, 5, and 6 until currentNode


becomes NULL

4. Make parent point to currentNode


root
5. If the value of the new node is less than that of
currentNode:
. 52 .
a. Make currentNode point to its left child
parent
6. If the value of the new node is greater than that
. 36 . 68 . of currentNode:

a. Make currentNode point to its right child

24 59 . 72 .
currentNode
. 70 80

Ver. 1.0 Session 13


Data Structures and Algorithms
Inserting Nodes in a Binary Search Tree (Contd.)

1. Mark the root node as currentNode

Locate the position of a new node 55. 2. Make parent point to NULL

3. Repeat steps 4, 5, and 6 until currentNode


becomes NULL

4. Make parent point to currentNode


root
5. If the value of the new node is less than that of
currentNode:
. 52 .
a. Make currentNode point to its left child
parent
6. If the value of the new node is greater than that
. 36 . 68 . of currentNode:

parent a. Make currentNode point to its right child

24 59 . 72 .
currentNode
. 70 80

Ver. 1.0 Session 13


Data Structures and Algorithms
Inserting Nodes in a Binary Search Tree (Contd.)

1. Mark the root node as currentNode

Locate the position of a new node 55. 2. Make parent point to NULL

3. Repeat steps 4, 5, and 6 until currentNode


becomes NULL
55 < 59
4. Make parent point to currentNode
root
5. If the value of the new node is less than that of
currentNode:
. 52 .
a. Make currentNode point to its left child

6. If the value of the new node is greater than that


. 36 . 68 . of currentNode:

parent a. Make currentNode point to its right child

24 59 . 72 .
currentNode
. 70 80

Ver. 1.0 Session 13


Data Structures and Algorithms
Inserting Nodes in a Binary Search Tree (Contd.)

1. Mark the root node as currentNode

Locate the position of a new node 55. 2. Make parent point to NULL

3. Repeat steps 4, 5, and 6 until currentNode


becomes NULL
55 < 59
4. Make parent point to currentNode
root
5. If the value of the new node is less than that of
currentNode:
. 52 .
a. Make currentNode point to its left child

6. If the value of the new node is greater than that


. 36 . 68 . of currentNode:

parent a. Make currentNode point to its right child

24 59 . 72 .
currentNode
currentNode = NULL
. 70 80

Ver. 1.0 Session 13


Data Structures and Algorithms
Inserting Nodes in a Binary Search Tree (Contd.)

1. Mark the root node as currentNode

Locate the position of a new node 55. 2. Make parent point to NULL

3. Repeat steps 4, 5, and 6 until currentNode


becomes NULL

4. Make parent point to currentNode


root
5. If the value of the new node is less than that of
currentNode:
. 52 .
a. Make currentNode point to its left child

6. If the value of the new node is greater than that


. 36 . 68 . of currentNode:

parent a. Make currentNode point to its right child

24 59 . 72 .

currentNode = NULL
. 70 80

Ver. 1.0 Session 13


Data Structures and Algorithms
Inserting Nodes in a Binary Search Tree (Contd.)

1. Mark the root node as currentNode


Once the parent of the new 2. Make parent point to NULL
node is located, you can
3. Repeat steps 4, 5, and 6 until currentNode
insert the node as the child becomes NULL
of its parent. 4. Make parent point to currentNode
root
5. If the value of the new node is less than that of
currentNode:
. 52 .
a. Make currentNode point to its left child

6. If the value of the new node is greater than that


. 36 . 68 . of currentNode:

parent a. Make currentNode point to its right child

24 59 . 72 .

currentNode = NULL
. 70 80

Ver. 1.0 Session 13


Data Structures and Algorithms
Inserting Nodes in a Binary Search Tree (Contd.)

Write an algorithm to insert a node in a binary search tree.

Ver. 1.0 Session 13


Data Structures and Algorithms
Inserting Nodes in a Binary Search Tree (Contd.)
1. Allocate memory for the new node.

2. Assign value to the data field of new node.


Insert 55 to insert a node
Algorithm
3. Make the left and right child of the new node
in a binary search tree. point to NULL.

4. Locate the node which will be the parent of


the node to be inserted. Mark it as parent.
root
5. If parent is NULL (Tree is empty):

. 52 . a. Mark the new node as ROOT


b. Exit

6. If the value in the data field of new node is


. 36 . 68 . less than that of parent:

a. Make the left child of parent point to


the new node

24 59 . 72 . b. Exit

7. If the value in the data field of the new node is


greater than that of the parent:

. 70 80 a. Make the right child of parent point to


the new node
b. Exit

Ver. 1.0 Session 13


Data Structures and Algorithms
Inserting Nodes in a Binary Search Tree (Contd.)
1. Allocate memory for the new node.

2. Assign value to the data field of new node.

3. Make the left and right child of the new node


point to NULL.

4. Locate the node which will be the parent of


the node to be inserted. Mark it as parent.
root
5. If parent is NULL (Tree is empty):

. 52 . a. Mark the new node as ROOT


b. Exit

6. If the value in the data field of new node is


. 36 . 68 . less than that of parent:

a. Make the left child of parent point to


the new node

24 59 . 72 . b. Exit

7. If the value in the data field of the new node is


greater than that of the parent:

. 70 80 a. Make the right child of parent point to


the new node
b. Exit

Ver. 1.0 Session 13


Data Structures and Algorithms
Inserting Nodes in a Binary Search Tree (Contd.)
1. Allocate memory for the new node.

2. Assign value to the data field of new node.

3. Make the left and right child of the new node


point to NULL.

4. Locate the node which will be the parent of


the node to be inserted. Mark it as parent.
root
5. If parent is NULL (Tree is empty):

. 52 . a. Mark the new node as ROOT


b. Exit

6. If the value in the data field of new node is


. 36 . 68 . less than that of parent:

a. Make the left child of parent point to


the new node

24 59 . 72 . b. Exit

7. If the value in the data field of the new node is


greater than that of the parent:

55 . 70 80 a. Make the right child of parent point to


the new node
b. Exit

Ver. 1.0 Session 13


Data Structures and Algorithms
Inserting Nodes in a Binary Search Tree (Contd.)
1. Allocate memory for the new node.

2. Assign value to the data field of new node.

3. Make the left and right child of the new node


point to NULL.

4. Locate the node which will be the parent of


the node to be inserted. Mark it as parent.
root
5. If parent is NULL (Tree is empty):

. 52 . a. Mark the new node as ROOT


b. Exit

6. If the value in the data field of new node is


. 36 . 68 . less than that of parent:

a. Make the left child of parent point to


the new node

24 59 . 72 . b. Exit

7. If the value in the data field of the new node is


greater than that of the parent:

55 . 70 80 a. Make the right child of parent point to


the new node
b. Exit

Ver. 1.0 Session 13


Data Structures and Algorithms
Inserting Nodes in a Binary Search Tree (Contd.)
1. Allocate memory for the new node.

2. Assign value to the data field of new node.

3. Make the left and right child of the new node


point to NULL.

4. Locate the node which will be the parent of


the node to be inserted. Mark it as parent.
root
5. If parent is NULL (Tree is empty):

. 52 . a. Mark the new node as ROOT


b. Exit

6. If the value in the data field of new node is


. 36 . 68 . less than that of parent:

parent a. Make the left child of parent point to


the new node

24 59 . 72 . b. Exit

7. If the value in the data field of the new node is


greater than that of the parent:

55 . 70 80 a. Make the right child of parent point to


the new node
b. Exit

Ver. 1.0 Session 13


Data Structures and Algorithms
Inserting Nodes in a Binary Search Tree (Contd.)
1. Allocate memory for the new node.

2. Assign value to the data field of new node.

3. Make the left and right child of the new node


point to NULL.

4. Locate the node which will be the parent of


the node to be inserted. Mark it as parent.
root
5. If parent is NULL (Tree is empty):

. 52 . a. Mark the new node as ROOT


b. Exit

6. If the value in the data field of new node is


. 36 . 68 . less than that of parent:

parent a. Make the left child of parent point to


the new node

24 59 . 72 . b. Exit

7. If the value in the data field of the new node is


greater than that of the parent:

55 . 70 80 a. Make the right child of parent point to


the new node
b. Exit

Ver. 1.0 Session 13


Data Structures and Algorithms
Inserting Nodes in a Binary Search Tree (Contd.)
1. Allocate memory for the new node.

2. Assign value to the data field of new node.

3. Make the left and right child of the new node


point to NULL.

4. Locate the node which will be the parent of


the node to be inserted. Mark it as parent.
root
5. If parent is NULL (Tree is empty):

. 52 . a. Mark the new node as ROOT


b. Exit

6. If the value in the data field of new node is


. 36 . 68 . less than that of parent:

parent a. Make the left child of parent point to


the new node

24 59 . 72 . b. Exit

7. If the value in the data field of the new node is


greater than that of the parent:

55 . 70 80 a. Make the right child of parent point to


the new node
b. Exit

Ver. 1.0 Session 13


Data Structures and Algorithms
Inserting Nodes in a Binary Search Tree (Contd.)
1. Allocate memory for the new node.

2. Assign value to the data field of new node.

3. Make the left and right child of the new node


point to NULL.

4. Locate the node which will be the parent of


the node to be inserted. Mark it as parent.
root
5. If parent is NULL (Tree is empty):

. 52 . a. Mark the new node as ROOT


b. Exit

6. If the value in the data field of new node is


. 36 . 68 . less than that of parent:

parent a. Make the left child of parent point to


the new node

24 . 59 . 72 . b. Exit

7. If the value in the data field of the new node is


greater than that of the parent:

55 . 70 80 a. Make the right child of parent point to


the new node
b. Exit

Ver. 1.0 Session 13


Data Structures and Algorithms
Inserting Nodes in a Binary Search Tree (Contd.)
1. Allocate memory for the new node.

2. Assign value to the data field of new node.

3. Make the left and right child of the new node


point to NULL.

4. Locate the node which will be the parent of


the node to be inserted. Mark it as parent.
root
5. If parent is NULL (Tree is empty):

. 52 . a. Mark the new node as ROOT


b. Exit

6. If the value in the data field of new node is


. 36 . 68 . less than that of parent:

parent a. Make the left child of parent point to


the new node

24 59 . 72 . b. Exit

7. If the value in the data field of the new node is


greater than that of the parent:

55 . 70 80 a. Make the right child of parent point to


the new node
b. Exit
Insert operation complete
Ver. 1.0 Session 13
Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree

Deletean
Write operation
algorithminto
a locate
binary the
search tree refers
position to theto
of the node
process from
deleted of deleting thesearch
a binary specified
tree.node from the tree.
Before implementing a delete operation, you first need to
locate the position of the node to be deleted and its parent.
To locate the position of the node to be deleted and its
parent, you need to implement a search operation.

Ver. 1.0 Session 13


Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Make a variable/pointer currentNode point to


the ROOT node.
Suppose
Algorithmyou
to locate
want to
thedelete
node
2. Make a variable/pointer parent point to NULL.
node
to be 70
deleted.
3. Repeat steps a, b, and c until currentNode
becomes NULL or the value of the node to be
root searched becomes equal to that of
currentNode:
. 52 . a. Make parent point to currentNode.

b. If the value to be deleted is less than


that of currentNode:
. 36 . 68 .
i. Make currentNode point to its
left child.

24 59 . 72 . c. If the value to be deleted is greater


than that of currentNode:

i. Make currentNode point to its


. 70 80 right child.

69

Ver. 1.0 Session 13


Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Make a variable/pointer currentNode point to


the ROOT node.
Suppose you want to delete
2. Make a variable/pointer parent point to NULL.
node 70
3. Repeat steps a, b, and c until currentNode
becomes NULL or the value of the node to be
root searched becomes equal to that of
currentNode:
currentNode . 52 . a. Make parent point to currentNode.

b. If the value to be deleted is less than


that of currentNode:
. 36 . 68 .
i. Make currentNode point to its
left child.

24 59 . 72 . c. If the value to be deleted is greater


than that of currentNode:

i. Make currentNode point to its


. 70 80 right child.

69

Ver. 1.0 Session 13


Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Make a variable/pointer currentNode point to


the ROOT node.
Suppose you want to delete
2. Make a variable/pointer parent point to NULL.
node 70
3. Repeat steps a, b, and c until currentNode
becomes NULL or the value of the node to be
root searched becomes equal to that of
currentNode:
currentNode . 52 . a. Make parent point to currentNode.
parent = NULL
b. If the value to be deleted is less than
that of currentNode:
. 36 . 68 .
i. Make currentNode point to its
left child.

24 59 . 72 . c. If the value to be deleted is greater


than that of currentNode:

i. Make currentNode point to its


. 70 80 right child.

69

Ver. 1.0 Session 13


Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Make a variable/pointer currentNode point to


the ROOT node.
Suppose you want to delete
2. Make a variable/pointer parent point to NULL.
node 70
3. Repeat steps a, b, and c until currentNode
becomes NULL or the value of the node to be
root searched becomes equal to that of
currentNode:
currentNode . 52 . a. Make parent point to currentNode.
parent = NULL
b. If the value to be deleted is less than
that of currentNode:
. 36 . 68 .
i. Make currentNode point to its
left child.

24 59 . 72 . c. If the value to be deleted is greater


than that of currentNode:

i. Make currentNode point to its


. 70 80 right child.

69

Ver. 1.0 Session 13


Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Make a variable/pointer currentNode point to


the ROOT node.
Suppose you want to delete
2. Make a variable/pointer parent point to NULL.
node 70
3. Repeat steps a, b, and c until currentNode
becomes NULL or the value of the node to be
root searched becomes equal to that of
currentNode:
currentNode . 52 . parent
a. Make parent point to currentNode.
parent = NULL
b. If the value to be deleted is less than
that of currentNode:
. 36 . 68 .
i. Make currentNode point to its
left child.

24 59 . 72 . c. If the value to be deleted is greater


than that of currentNode:

i. Make currentNode point to its


. 70 80 right child.

69

Ver. 1.0 Session 13


Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Make a variable/pointer currentNode point to


the ROOT node.
Suppose you want to delete
2. Make a variable/pointer parent point to NULL.
node 70
3. Repeat steps a, b, and c until currentNode
becomes NULL or the value of the node to be
root searched becomes equal to that of
currentNode:
currentNode . 52 . parent
a. Make parent point to currentNode.

b. If the value to be deleted is less than


that of currentNode:
. 36 . 68 . 70 > 52
i. Make currentNode point to its
left child.

24 59 . 72 . c. If the value to be deleted is greater


than that of currentNode:

i. Make currentNode point to its


. 70 80 right child.

69

Ver. 1.0 Session 13


Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Make a variable/pointer currentNode point to


the ROOT node.
Suppose you want to delete
2. Make a variable/pointer parent point to NULL.
node 70
3. Repeat steps a, b, and c until currentNode
becomes NULL or the value of the node to be
root searched becomes equal to that of
currentNode:
currentNode . 52 . parent
a. Make parent point to currentNode.

b. If the value to be deleted is less than


that of currentNode:
. 36 . 68 . 70 > 52
i. Make currentNode point to its
left child.

24 59 . 72 . c. If the value to be deleted is greater


than that of currentNode:

i. Make currentNode point to its


. 70 80 right child.

69

Ver. 1.0 Session 13


Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Make a variable/pointer currentNode point to


the ROOT node.
Suppose you want to delete
2. Make a variable/pointer parent point to NULL.
node 70
3. Repeat steps a, b, and c until currentNode
becomes NULL or the value of the node to be
root searched becomes equal to that of
currentNode:
currentNode . 52 . parent
a. Make parent point to currentNode.
currentNode
b. If the value to be deleted is less than
that of currentNode:
. 36 . 68 . 70 > 52
i. Make currentNode point to its
left child.

24 59 . 72 . c. If the value to be deleted is greater


than that of currentNode:

i. Make currentNode point to its


. 70 80 right child.

69

Ver. 1.0 Session 13


Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Make a variable/pointer currentNode point to


the ROOT node.
Suppose you want to delete
2. Make a variable/pointer parent point to NULL.
node 70
3. Repeat steps a, b, and c until currentNode
becomes NULL or the value of the node to be
root searched becomes equal to that of
currentNode:
. 52 . parent
a. Make parent point to currentNode.
currentNode
b. If the value to be deleted is less than
that of currentNode:
. 36 . 68 .
i. Make currentNode point to its
left child.

24 59 . 72 . c. If the value to be deleted is greater


than that of currentNode:

i. Make currentNode point to its


. 70 80 right child.

69

Ver. 1.0 Session 13


Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Make a variable/pointer currentNode point to


the ROOT node.
Suppose you want to delete
2. Make a variable/pointer parent point to NULL.
node 70
3. Repeat steps a, b, and c until currentNode
becomes NULL or the value of the node to be
root searched becomes equal to that of
currentNode:
. 52 . parent
a. Make parent point to currentNode.
currentNode
b. If the value to be deleted is less than
that of currentNode:
. 36 parent . 68 .
i. Make currentNode point to its
left child.

24 59 . 72 . c. If the value to be deleted is greater


than that of currentNode:

i. Make currentNode point to its


. 70 80 right child.

69

Ver. 1.0 Session 13


Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Make a variable/pointer currentNode point to


the ROOT node.
Suppose you want to delete
2. Make a variable/pointer parent point to NULL.
node 70
3. Repeat steps a, b, and c until currentNode
becomes NULL or the value of the node to be
root searched becomes equal to that of
70 > 68 currentNode:
. 52 . a. Make parent point to currentNode.
currentNode
b. If the value to be deleted is less than
that of currentNode:
. 36 parent . 68 .
i. Make currentNode point to its
left child.

24 59 . 72 . c. If the value to be deleted is greater


than that of currentNode:

i. Make currentNode point to its


. 70 80 right child.

69

Ver. 1.0 Session 13


Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Make a variable/pointer currentNode point to


the ROOT node.
Suppose you want to delete
2. Make a variable/pointer parent point to NULL.
node 70
3. Repeat steps a, b, and c until currentNode
becomes NULL or the value of the node to be
root searched becomes equal to that of
70 > 68 currentNode:
. 52 . a. Make parent point to currentNode.
currentNode
b. If the value to be deleted is less than
that of currentNode:
. 36 parent . 68 .
i. Make currentNode point to its
left child.

24 59 . 72 . c. If the value to be deleted is greater


than that of currentNode:

i. Make currentNode point to its


. 70 80 right child.

69

Ver. 1.0 Session 13


Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Make a variable/pointer currentNode point to


the ROOT node.
Suppose you want to delete
2. Make a variable/pointer parent point to NULL.
node 70
3. Repeat steps a, b, and c until currentNode
becomes NULL or the value of the node to be
root searched becomes equal to that of
70 > 68 currentNode:
. 52 . a. Make parent point to currentNode.
currentNode
b. If the value to be deleted is less than
that of currentNode:
. 36 parent . 68 .
currentNode i. Make currentNode point to its
left child.

24 59 . 72 . c. If the value to be deleted is greater


than that of currentNode:

i. Make currentNode point to its


. 70 80 right child.

69

Ver. 1.0 Session 13


Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Make a variable/pointer currentNode point to


the ROOT node.
Suppose you want to delete
2. Make a variable/pointer parent point to NULL.
node 70
3. Repeat steps a, b, and c until currentNode
becomes NULL or the value of the node to be
root searched becomes equal to that of
currentNode:
. 52 . a. Make parent point to currentNode.

b. If the value to be deleted is less than


that of currentNode:
. 36 parent . 68 .
currentNode i. Make currentNode point to its
left child.

24 59 . 72 . c. If the value to be deleted is greater


than that of currentNode:

i. Make currentNode point to its


. 70 80 right child.

69

Ver. 1.0 Session 13


Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Make a variable/pointer currentNode point to


the ROOT node.
Suppose you want to delete
2. Make a variable/pointer parent point to NULL.
node 70
3. Repeat steps a, b, and c until currentNode
becomes NULL or the value of the node to be
root searched becomes equal to that of
currentNode:
. 52 . a. Make parent point to currentNode.

b. If the value to be deleted is less than


that of currentNode:
. 36 parent . 68 .
currentNode i. Make currentNode point to its
left child.

24 59 . 72 . c. If the value to be deleted is greater


than that of currentNode:

parent i. Make currentNode point to its


. 70 80 right child.

69

Ver. 1.0 Session 13


Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Make a variable/pointer currentNode point to


the ROOT node.
Suppose you want to delete
2. Make a variable/pointer parent point to NULL.
node 70
3. Repeat steps a, b, and c until currentNode
becomes NULL or the value of the node to be
root searched becomes equal to that of
currentNode:
. 52 .
70 < 72 a. Make parent point to currentNode.

b. If the value to be deleted is less than


that of currentNode:
. 36 . 68 .
currentNode i. Make currentNode point to its
left child.

24 59 . 72 . c. If the value to be deleted is greater


than that of currentNode:

parent i. Make currentNode point to its


. 70 80 right child.

69

Ver. 1.0 Session 13


Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Make a variable/pointer currentNode point to


the ROOT node.
Suppose you want to delete
2. Make a variable/pointer parent point to NULL.
node 70
3. Repeat steps a, b, and c until currentNode
becomes NULL or the value of the node to be
root searched becomes equal to that of
currentNode:
. 52 .
70 < 72 a. Make parent point to currentNode.

b. If the value to be deleted is less than


that of currentNode:
. 36 . 68 .
currentNode i. Make currentNode point to its
left child.

24 59 . 72 . c. If the value to be deleted is greater


than that of currentNode:

parent i. Make currentNode point to its


. 70 80 right child.

currentNode
69

Ver. 1.0 Session 13


Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Make a variable/pointer currentNode point to


the ROOT node.
Suppose you want to delete
2. Make a variable/pointer parent point to NULL.
node 70
3. Repeat steps a, b, and c until currentNode
becomes NULL or the value of the node to be
root searched becomes equal to that of
currentNode:
. 52 . a. Make parent point to currentNode.

b. If the value to be deleted is less than


that of currentNode:
. 36 . 68 .
i. Make currentNode point to its
left child.

24 59 . 72 . c. If the value to be deleted is greater


than that of currentNode:

parent i. Make currentNode point to its


Nodes located . 70 80 right child.

currentNode
69

Ver. 1.0 Session 13


Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

Once the nodes are located, there can be three cases:


Case I: Node to be deleted is the leaf node
Case II: Node to be deleted has one child (left or right)
Case III: Node to be deleted has two children

Ver. 1.0 Session 13


Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

Write an algorithm to delete a leaf node from a binary


search tree.

Ver. 1.0 Session 13


Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Locate the node to be deleted. Mark it as


Delete node
Algorithm to delete
69 a leaf currentNode and its parent as parent.

node from the binary tree. 2. If currentNode is the root node: // If parent is
// NULL

a. Make ROOT point to NULL.


. 52 . b. Go to step 5.

3. If currentNode is left child of parent:

. 36 . 68 . a. Make left child field of parent point to


NULL.
b. Go to step 5.

4. If currentNode is right child of parent:


24 59 . 72 .
a. Make right child field of parent point to
NULL.
b. Go to step 5.
. 70 80
5. Release the memory for currentNode.

69

Ver. 1.0 Session 13


Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Locate the node to be deleted. Mark it as


Delete node 69 currentNode and its parent as parent.

2. If currentNode is the root node: // If parent is


// NULL

a. Make ROOT point to NULL.


. 52 . b. Go to step 5.

3. If currentNode is left child of parent:

. 36 . 68 . a. Make left child field of parent point to


NULL.
b. Go to step 5.

4. If currentNode is right child of parent:


24 59 . 72 .
a. Make right child field of parent point to
NULL.
b. Go to step 5.
. 70 80
5. Release the memory for currentNode.

parent
69

currentNode
Ver. 1.0 Session 13
Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Locate the node to be deleted. Mark it as


Delete node 69 currentNode and its parent as parent.

2. If currentNode is the root node: // If parent is


// NULL

a. Make ROOT point to NULL.


. 52 . b. Go to step 5.

3. If currentNode is left child of parent:

. 36 . 68 . a. Make left child field of parent point to


NULL.
b. Go to step 5.

4. If currentNode is right child of parent:


24 59 . 72 .
a. Make right child field of parent point to
NULL.
b. Go to step 5.
. 70 80
5. Release the memory for currentNode.

parent
69

currentNode
Ver. 1.0 Session 13
Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Locate the node to be deleted. Mark it as


Delete node 69 currentNode and its parent as parent.

2. If currentNode is the root node: // If parent is


// NULL

a. Make ROOT point to NULL.


. 52 . b. Go to step 5.

3. If currentNode is left child of parent:

. 36 . 68 . a. Make left child field of parent point to


NULL.
b. Go to step 5.

4. If currentNode is right child of parent:


24 59 . 72 .
a. Make right child field of parent point to
NULL.
b. Go to step 5.
. 70 80
5. Release the memory for currentNode.

parent
69

currentNode
Ver. 1.0 Session 13
Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Locate the node to be deleted. Mark it as


Delete node 69 currentNode and its parent as parent.

2. If currentNode is the root node: // If parent is


// NULL

a. Make ROOT point to NULL.


. 52 . b. Go to step 5.

3. If currentNode is left child of parent:

. 36 . 68 . a. Make left child field of parent point to


NULL.
b. Go to step 5.

4. If currentNode is right child of parent:


24 59 . 72 .
a. Make right child field of parent point to
NULL.
b. Go to step 5.
. 70 80
5. Release the memory for currentNode.

parent
69

currentNode
Ver. 1.0 Session 13
Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Locate the node to be deleted. Mark it as


Delete node 69 currentNode and its parent as parent.

2. If currentNode is the root node: // If parent is


// NULL

a. Make ROOT point to NULL.


. 52 . b. Go to step 5.

3. If currentNode is left child of parent:

. 36 . 68 . a. Make left child field of parent point to


NULL.
b. Go to step 5.

4. If currentNode is right child of parent:


24 59 . 72 .
a. Make right child field of parent point to
NULL.
b. Go to step 5.
. 70 80
5. Release the memory for currentNode.

parent
69

currentNode
Ver. 1.0 Session 13
Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Locate the node to be deleted. Mark it as


Delete node 69 currentNode and its parent as parent.

2. If currentNode is the root node: // If parent is


// NULL

a. Make ROOT point to NULL.


. 52 . b. Go to step 5.

3. If currentNode is left child of parent:

. 36 . 68 . a. Make left child field of parent point to


NULL.
b. Go to step 5.

4. If currentNode is right child of parent:


24 59 . 72 .
a. Make right child field of parent point to
NULL.
b. Go to step 5.
. 70 80
5. Release the memory for currentNode.

parent
69
Delete operation complete
currentNode
Ver. 1.0 Session 13
Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

Write an algorithm to delete a node, which has one child


from a binary search tree.

Ver. 1.0 Session 13


Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Locate the node to be deleted. Mark it as


currentNode and its parent as parent.
Algorithm
Delete to delete
node 80 a node
2. If currentNode has a left child:
with one child. a. Mark the left child of currentNode as
root child.
b. Go to step 4.
. 52 .
3. If currentNode has a right child:
a. Mark the right child of currentNode as
child.
. 36 . 68 . b. Go to step 4.

4. If currentNode is the root node:


a. Mark child as root.
b. Go to step 7.
24 59 . 72 .
5. If currentNode is the left child of parent:
a. Make left child field of parent point to
child.
70 . 80 b. Go to step 7.

6. If currentNode is the right child of parent:


a. Make right child field of parent point to
75 child.
b. Go to step 7.

7. Release the memory of currentNode.


Ver. 1.0 Session 13
Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Locate the node to be deleted. Mark it as


currentNode and its parent as parent.
Delete node 80
2. If currentNode has a left child:
a. Mark the left child of currentNode as
root child.
b. Go to step 4.
. 52 .
3. If currentNode has a right child:
a. Mark the right child of currentNode as
child.
. 36 . 68 . b. Go to step 4.

parent 4. If currentNode is the root node:


a. Mark child as root.
b. Go to step 7.
24 59 . 72 .
currentNode 5. If currentNode is the left child of parent:
a. Make left child field of parent point to
child.
70 . 80 b. Go to step 7.

6. If currentNode is the right child of parent:


a. Make right child field of parent point to
75 child.
b. Go to step 7.

7. Release the memory of currentNode.


Ver. 1.0 Session 13
Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Locate the node to be deleted. Mark it as


currentNode and its parent as parent.
Delete node 80
2. If currentNode has a left child:
a. Mark the left child of currentNode as
root child.
b. Go to step 4.
. 52 .
3. If currentNode has a right child:
a. Mark the right child of currentNode as
child.
. 36 . 68 . b. Go to step 4.

parent 4. If currentNode is the root node:


a. Mark child as root.
b. Go to step 7.
24 59 . 72 .
currentNode 5. If currentNode is the left child of parent:
a. Make left child field of parent point to
child.
70 . 80 b. Go to step 7.

6. If currentNode is the right child of parent:


a. Make right child field of parent point to
75 child.
b. Go to step 7.

7. Release the memory of currentNode.


Ver. 1.0 Session 13
Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Locate the node to be deleted. Mark it as


currentNode and its parent as parent.
Delete node 80
2. If currentNode has a left child:
a. Mark the left child of currentNode as
root child.
b. Go to step 4.
. 52 .
3. If currentNode has a right child:
a. Mark the right child of currentNode as
child.
. 36 . 68 . b. Go to step 4.

parent 4. If currentNode is the root node:


a. Mark child as root.
b. Go to step 7.
24 59 . 72 .
currentNode 5. If currentNode is the left child of parent:
a. Make left child field of parent point to
child.
70 . 80 b. Go to step 7.

6. If currentNode is the right child of parent:


a. Make right child field of parent point to
75 child.
b. Go to step 7.

child 7. Release the memory of currentNode.


Ver. 1.0 Session 13
Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Locate the node to be deleted. Mark it as


currentNode and its parent as parent.
Delete node 80
2. If currentNode has a left child:
a. Mark the left child of currentNode as
root child.
b. Go to step 4.
. 52 .
3. If currentNode has a right child:
a. Mark the right child of currentNode as
child.
. 36 . 68 . b. Go to step 4.

parent 4. If currentNode is the root node:


a. Mark child as root.
b. Go to step 7.
24 59 . 72 .
currentNode 5. If currentNode is the left child of parent:
a. Make left child field of parent point to
child.
70 . 80 b. Go to step 7.

6. If currentNode is the right child of parent:


a. Make right child field of parent point to
75 child.
b. Go to step 7.

child 7. Release the memory of currentNode.


Ver. 1.0 Session 13
Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Locate the node to be deleted. Mark it as


currentNode and its parent as parent.
Delete node 80
2. If currentNode has a left child:
a. Mark the left child of currentNode as
root child.
b. Go to step 4.
. 52 .
3. If currentNode has a right child:
a. Mark the right child of currentNode as
child.
. 36 . 68 . b. Go to step 4.

parent 4. If currentNode is the root node:


a. Mark child as root.
b. Go to step 7.
24 59 . 72 .
currentNode 5. If currentNode is the left child of parent:
a. Make left child field of parent point to
child.
70 . 80 b. Go to step 7.

6. If currentNode is the right child of parent:


a. Make right child field of parent point to
75 child.
b. Go to step 7.

child 7. Release the memory of currentNode.


Ver. 1.0 Session 13
Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Locate the node to be deleted. Mark it as


currentNode and its parent as parent.
Delete node 80
2. If currentNode has a left child:
a. Mark the left child of currentNode as
root child.
b. Go to step 4.
. 52 .
3. If currentNode has a right child:
a. Mark the right child of currentNode as
child.
. 36 . 68 . b. Go to step 4.

parent 4. If currentNode is the root node:


a. Mark child as root.
b. Go to step 7.
24 59 . 72 .
currentNode 5. If currentNode is the left child of parent:
a. Make left child field of parent point to
child.
70 . 80 b. Go to step 7.

6. If currentNode is the right child of parent:


a. Make right child field of parent point to
75 child.
b. Go to step 7.

child 7. Release the memory of currentNode.


Ver. 1.0 Session 13
Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Locate the node to be deleted. Mark it as


currentNode and its parent as parent.
Delete node 80
2. If currentNode has a left child:
a. Mark the left child of currentNode as
root child.
b. Go to step 4.
. 52 .
3. If currentNode has a right child:
a. Mark the right child of currentNode as
child.
. 36 . 68 . b. Go to step 4.

parent 4. If currentNode is the root node:


a. Mark child as root.
b. Go to step 7.
24 59 . 72 .
currentNode 5. If currentNode is the left child of parent:
a. Make left child field of parent point to
child.
70 . 80 b. Go to step 7.

6. If currentNode is the right child of parent:


a. Make right child field of parent point to
75 child.
b. Go to step 7.

child 7. Release the memory of currentNode.


Ver. 1.0 Session 13
Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Locate the node to be deleted. Mark it as


currentNode and its parent as parent.
Delete node 80
2. If currentNode has a left child:
a. Mark the left child of currentNode as
root child.
b. Go to step 4.
. 52 .
3. If currentNode has a right child:
a. Mark the right child of currentNode as
child.
. 36 . 68 . b. Go to step 4.

parent 4. If currentNode is the root node:


a. Mark child as root.
b. Go to step 7.
24 59 . 72 .
currentNode 5. If currentNode is the left child of parent:
a. Make left child field of parent point to
child.
70 . 80 b. Go to step 7.

6. If currentNode is the right child of parent:


a. Make right child field of parent point to
75 child.
b. Go to step 7.

child 7. Release the memory of currentNode.


Ver. 1.0 Session 13
Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Locate the node to be deleted. Mark it as


currentNode and its parent as parent.
Delete node 80
2. If currentNode has a left child:
a. Mark the left child of currentNode as
root child.
b. Go to step 4.
. 52 .
3. If currentNode has a right child:
a. Mark the right child of currentNode as
child.
. 36 . 68 . b. Go to step 4.

parent 4. If currentNode is the root node:


a. Mark child as root.
b. Go to step 7.
24 59 . 72 .
currentNode 5. If currentNode is the left child of parent:
a. Make left child field of parent point to
child.
70 . 80 b. Go to step 7.

6. If currentNode is the right child of parent:


a. Make right child field of parent point to
75 child.
b. Go to step 7.

child 7. Release the memory of currentNode.


Ver. 1.0 Session 13
Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Locate the node to be deleted. Mark it as


currentNode and its parent as parent.
Delete node 80
2. If currentNode has a left child:
a. Mark the left child of currentNode as
root child.
b. Go to step 4.
. 52 .
3. If currentNode has a right child:
a. Mark the right child of currentNode as
child.
. 36 . 68 . b. Go to step 4.

parent 4. If currentNode is the root node:


a. Mark child as root.
b. Go to step 7.
24 59 . 72 .
currentNode 5. If currentNode is the left child of parent:
a. Make left child field of parent point to
child.
70 . 80 b. Go to step 7.

6. If currentNode is the right child of parent:


a. Make right child field of parent point to
75 child.
b. Go to step 7.
Delete operation complete
child 7. Release the memory of currentNode.
Ver. 1.0 Session 13
Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

Write an algorithm to delete a node, which has two children


from a binary search tree.

Ver. 1.0 Session 13


Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Locate the node to be deleted. Mark it as


currentNode and its parent as parent.
Delete node
Algorithm 72
to delete a node
2. Locate the inorder successor of currentNode.
with two children. Mark it as Inorder_suc. Execute the following
root
steps to locate Inorder_suc:
a. Mark the right child of currentNode as
. 52 . Inorder_suc.
b. Repeat until the left child of
Inorder_suc becomes NULL:
i. Make Inorder_suc point to its
. 36 . 68 . left child.

3. Replace the information held by currentNode


with that of Inorder_suc.

24 59 . 72 . 4. If the node marked Inorder_suc is a leaf node:


a. Delete the node marked Inorder_suc
by using the algorithm for Case I.

70 . 80 5. If the node marked Inorder_suc has one child:


a. Delete the node marked Inorder_suc
by using the algorithm for Case II.

75

Ver. 1.0 Session 13


Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Locate the node to be deleted. Mark it as


currentNode and its parent as parent.
Delete node 72
2. Locate the inorder successor of currentNode.
Mark it as Inorder_suc. Execute the following
root
steps to locate Inorder_suc:
a. Mark the right child of currentNode as
. 52 . Inorder_suc.
b. Repeat until the left child of
parent Inorder_suc becomes NULL:
i. Make Inorder_suc point to its
. 36 . 68 . left child.

currentNode 3. Replace the information held by currentNode


with that of Inorder_suc.

24 59 . 72 . 4. If the node marked Inorder_suc is a leaf node:


a. Delete the node marked Inorder_suc
by using the algorithm for Case I.

70 . 80 5. If the node marked Inorder_suc has one child:


a. Delete the node marked Inorder_suc
by using the algorithm for Case II.

75

Ver. 1.0 Session 13


Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Locate the node to be deleted. Mark it as


currentNode and its parent as parent.
Delete node 72
2. Locate the inorder successor of currentNode.
Mark it as Inorder_suc. Execute the following
root
steps to locate Inorder_suc:
a. Mark the right child of currentNode as
. 52 . Inorder_suc.
b. Repeat until the left child of
parent Inorder_suc becomes NULL:
i. Make Inorder_suc point to its
. 36 . 68 . left child.

currentNode 3. Replace the information held by currentNode


with that of Inorder_suc.

24 59 . 72 . 4. If the node marked Inorder_suc is a leaf node:


a. Delete the node marked Inorder_suc
by using the algorithm for Case I.

70 . 80 5. If the node marked Inorder_suc has one child:


a. Delete the node marked Inorder_suc
by using the algorithm for Case II.

75

Ver. 1.0 Session 13


Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Locate the node to be deleted. Mark it as


currentNode and its parent as parent.
Delete node 72
2. Locate the inorder successor of currentNode.
Mark it as Inorder_suc. Execute the following
root
steps to locate Inorder_suc:
a. Mark the right child of currentNode as
. 52 . Inorder_suc.
b. Repeat until the left child of
parent Inorder_suc becomes NULL:
i. Make Inorder_suc point to its
. 36 . 68 . left child.

currentNode 3. Replace the information held by currentNode


with that of Inorder_suc.

24 59 . 72 . 4. If the node marked Inorder_suc is a leaf node:


a. Delete the node marked Inorder_suc
by using the algorithm for Case I.

70 . 80 5. If the node marked Inorder_suc has one child:


a. Delete the node marked Inorder_suc
by using the algorithm for Case II.
Inorder_suc
75

Ver. 1.0 Session 13


Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Locate the node to be deleted. Mark it as


currentNode and its parent as parent.
Delete node 72
2. Locate the inorder successor of currentNode.
Mark it as Inorder_suc. Execute the following
root
steps to locate Inorder_suc:
a. Mark the right child of currentNode as
. 52 . Inorder_suc.
b. Repeat until the left child of
parent Inorder_suc becomes NULL:
i. Make Inorder_suc point to its
. 36 . 68 . left child.

currentNode 3. Replace the information held by currentNode


with that of Inorder_suc.

24 59 . 72 . 4. If the node marked Inorder_suc is a leaf node:


a. Delete the node marked Inorder_suc
by using the algorithm for Case I.

70 . 80 5. If the node marked Inorder_suc has one child:


a. Delete the node marked Inorder_suc
by using the algorithm for Case II.
Inorder_suc
75

Ver. 1.0 Session 13


Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Locate the node to be deleted. Mark it as


currentNode and its parent as parent.
Delete node 72
2. Locate the inorder successor of currentNode.
Mark it as Inorder_suc. Execute the following
root
steps to locate Inorder_suc:
a. Mark the right child of currentNode as
. 52 . Inorder_suc.
b. Repeat until the left child of
parent Inorder_suc becomes NULL:
i. Make Inorder_suc point to its
. 36 . 68 . left child.

currentNode 3. Replace the information held by currentNode


with that of Inorder_suc.

24 59 . 72 . 4. If the node marked Inorder_suc is a leaf node:


a. Delete the node marked Inorder_suc
by using the algorithm for Case I.

70 . 80 5. If the node marked Inorder_suc has one child:


a. Delete the node marked Inorder_suc
by using the algorithm for Case II.
Inorder_suc
75

Inorder_suc
Ver. 1.0 Session 13
Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Locate the node to be deleted. Mark it as


currentNode and its parent as parent.
Delete node 72
2. Locate the inorder successor of currentNode.
Mark it as Inorder_suc. Execute the following
root
steps to locate Inorder_suc:
a. Mark the right child of currentNode as
. 52 . Inorder_suc.
b. Repeat until the left child of
parent Inorder_suc becomes NULL:
i. Make Inorder_suc point to its
. 36 . 68 . left child.

currentNode 3. Replace the information held by currentNode


with that of Inorder_suc.

24 59 . 72
75 . 4. If the node marked Inorder_suc is a leaf node:
a. Delete the node marked Inorder_suc
by using the algorithm for Case I.

70 . 80 5. If the node marked Inorder_suc has one child:


a. Delete the node marked Inorder_suc
by using the algorithm for Case II.

75

Inorder_suc
Ver. 1.0 Session 13
Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Locate the node to be deleted. Mark it as


currentNode and its parent as parent.
Delete node 72
2. Locate the inorder successor of currentNode.
Mark it as Inorder_suc. Execute the following
root
steps to locate Inorder_suc:
a. Mark the right child of currentNode as
. 52 . Inorder_suc.
b. Repeat until the left child of
parent Inorder_suc becomes NULL:
i. Make Inorder_suc point to its
. 36 . 68 . left child.

currentNode 3. Replace the information held by currentNode


with that of Inorder_suc.

24 59 . 75 . 4. If the node marked Inorder_suc is a leaf node:


a. Delete the node marked Inorder_suc
by using the algorithm for Case I.

70 . 80 5. If the node marked Inorder_suc has one child:


a. Delete the node marked Inorder_suc
by using the algorithm for Case II.

75

Inorder_suc
Ver. 1.0 Session 13
Data Structures and Algorithms
Deleting Nodes from a Binary Search Tree (Contd.)

1. Locate the node to be deleted. Mark it as


currentNode and its parent as parent.
Delete node 72:
2. Locate the inorder successor of currentNode.
Mark it as Inorder_suc. Execute the following
root
steps to locate Inorder_suc:
a. Mark the right child of currentNode as
. 52 . Inorder_suc.
b. Repeat until the left child of
parent Inorder_suc becomes NULL:
i. Make Inorder_suc point to its
. 36 . 68 . left child.

currentNode 3. Replace the information held by currentNode


with that of Inorder_suc.

24 59 . 75 . 4. If the node marked Inorder_suc is a leaf node:


a. Delete the node marked Inorder_suc
by using the algorithm for Case I.

70 . 80 5. If the node marked Inorder_suc has one child:


a. Delete the node marked Inorder_suc
by using the algorithm for Case II.

75
Delete operation complete
Inorder_suc
Ver. 1.0 Session 13
Data Structures and Algorithms
Activity: Implementing a Binary Search Tree

Problem Statement:
Write a program to implement insert and traverse operations
on a binary search tree that contains the words in a dictionary.

Ver. 1.0 Session 13


Data Structures and Algorithms
Summary

In this session, you learned that:


A tree is a nonlinear data structure that represents a
hierarchical relationship among the various data elements.
A binary tree is a specific type of tree in which each node can
have a maximum of two children.
Binary trees can be implemented by using arrays as well as
linked lists, depending upon requirement.
Traversal of a tree is the process of visiting all the nodes of the
tree once. There are three types of traversals, namely inorder,
preorder, and postorder traversal.
Binary search tree is a binary tree in which the value of the left
child of a node is always less than the value of the node, and
the value of the right child of a node is greater than the value of
the node.

Ver. 1.0 Session 13


Data Structures and Algorithms
Summary (Contd.)

Inserting a node in a binary search tree requires you to first


locate the appropriate position for the node to be inserted.
You need to check for the following three cases before deleting
a node from a binary search tree.
If the node to be deleted is the leaf node
If the node to be deleted has one child (left or right)
If the node to be deleted has two children

Ver. 1.0 Session 13

You might also like