0% found this document useful (0 votes)
46 views129 pages

11 DS and Algorithm Tree

The document describes algorithms for deleting a node from a threaded binary tree. It involves locating the node to delete by traversing the tree and marking the parent and current nodes. Once located, the child nodes are reattached and threads are adjusted depending on the position of the node to be deleted. Pseudocode is provided outlining the step-by-step process to locate the node and then restructure the tree after deletion.

Uploaded by

Rahul Sharma
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPS, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
46 views129 pages

11 DS and Algorithm Tree

The document describes algorithms for deleting a node from a threaded binary tree. It involves locating the node to delete by traversing the tree and marking the parent and current nodes. Once located, the child nodes are reattached and threads are adjusted depending on the position of the node to be deleted. Pseudocode is provided outlining the step-by-step process to locate the node and then restructure the tree after deletion.

Uploaded by

Rahul Sharma
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPS, PDF, TXT or read online on Scribd
You are on page 1/ 129

Data Structures and Algorithms

Objectives
In this session, you will learn to:
Implement a threaded binary tree
Implement a height balanced binary tree
Store data in a graph

Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
Write
Deletean
operation
algorithminto
a locate
threaded
thebinary
node to
tree
berefers
deleted
to in
thea
threaded
process ofbinary
removing
tree. the specified node from the threaded
binary tree.
Before implementing a delete operation, you first need to
locate the node to be deleted.
This requires you to implement a search operation.
After the search operation, the node to be deleted is marked
as the currentNode and its parent as parent.

Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
1.
Mark the left child of the header node as
(Contd.)
Delete 80

node
toheader
locate
the

Algorithm
node
to be deleted and its parent in
a threaded binary tree.

2.
3.

. 65 .
. 40 .

30

. 72 .
. 50 .

69

60
Ver. 1.0

80

currentNode.
Mark the header node as parent.
Repeat steps a, b, c, d, and e until the node
to be searched is found or currentNode
becomes NULL:
a.
Mark currentNode as parent.
b.
If the value to be searched is less
than that of currentNode, and the left
child of the currentNode is a link:
i.
Make currentNode point to its
left child and go to step 3.
c.
If the value to be searched is less
than that of currentNode, and the left
child of the currentNode is a thread:
i.
Make currentNode as NULL
and go to step 3.
d.
If the value to be searched is greater
than that of currentNode, and the
right child of the currentNode is a link:
i.
Make currentNode point to its
right child and go to step 3.
e.
If the value to be searched is greater
than that of currentNode, and the
right child of the currentNode is a
thread:
i.
Mark currentNode as NULL
and go to step 3.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
1.
Mark the left child of the header node as
(Contd.)
Delete 80

currentNode

. 65 .

. 40 .

30

. 72 .
. 50 .

69

60
Ver. 1.0

2.
3.

header node

80

currentNode.
Mark the header node as parent.
Repeat steps a, b, c, d, and e until the node
to be searched is found or currentNode
becomes NULL:
a.
Mark currentNode as parent.
b.
If the value to be searched is less
than that of currentNode, and the left
child of the currentNode is a link:
i.
Make currentNode point to its
left child and go to step 3.
c.
If the value to be searched is less
than that of currentNode, and the left
child of the currentNode is a thread:
i.
Make currentNode as NULL
and go to step 3.
d.
If the value to be searched is greater
than that of currentNode, and the
right child of the currentNode is a link:
i.
Make currentNode point to its
right child and go to step 3.
e.
If the value to be searched is greater
than that of currentNode, and the
right child of the currentNode is a
thread:
i.
Mark currentNode as NULL
and go to step 3.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
1.
Mark the left child of the header node as
(Contd.)
Delete 80

currentNode

. 65 .

. 40 .

30

. 72 .
. 50 .

69

60
Ver. 1.0

2.
3.

parent header node

80

currentNode.
Mark the header node as parent.
Repeat steps a, b, c, d, and e until the node
to be searched is found or currentNode
becomes NULL:
a.
Mark currentNode as parent.
b.
If the value to be searched is less
than that of currentNode, and the left
child of the currentNode is a link:
i.
Make currentNode point to its
left child and go to step 3.
c.
If the value to be searched is less
than that of currentNode, and the left
child of the currentNode is a thread:
i.
Make currentNode as NULL
and go to step 3.
d.
If the value to be searched is greater
than that of currentNode, and the
right child of the currentNode is a link:
i.
Make currentNode point to its
right child and go to step 3.
e.
If the value to be searched is greater
than that of currentNode, and the
right child of the currentNode is a
thread:
i.
Mark currentNode as NULL
and go to step 3.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
1.
Mark the left child of the header node as
(Contd.)
Delete 80

currentNode

. 65 .

. 40 .

30

. 72 .
. 50 .

69

60
Ver. 1.0

2.
3.

parent header node

80

currentNode.
Mark the header node as parent.
Repeat steps a, b, c, d, and e until the node
to be searched is found or currentNode
becomes NULL:
a.
Mark currentNode as parent.
b.
If the value to be searched is less
than that of currentNode, and the left
child of the currentNode is a link:
i.
Make currentNode point to its
left child and go to step 3.
c.
If the value to be searched is less
than that of currentNode, and the left
child of the currentNode is a thread:
i.
Make currentNode as NULL
and go to step 3.
d.
If the value to be searched is greater
than that of currentNode, and the
right child of the currentNode is a link:
i.
Make currentNode point to its
right child and go to step 3.
e.
If the value to be searched is greater
than that of currentNode, and the
right child of the currentNode is a
thread:
i.
Mark currentNode as NULL
and go to step 3.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
1.
Mark the left child of the header node as
(Contd.)
Delete 80

currentNode

. 65 .

parent

. 40 .

30

. 72 .
. 50 .

69

60
Ver. 1.0

2.
3.

parent header node

80

currentNode.
Mark the header node as parent.
Repeat steps a, b, c, d, and e until the node
to be searched is found or currentNode
becomes NULL:
a.
Mark currentNode as parent.
b.
If the value to be searched is less
than that of currentNode, and the left
child of the currentNode is a link:
i.
Make currentNode point to its
left child and go to step 3.
c.
If the value to be searched is less
than that of currentNode, and the left
child of the currentNode is a thread:
i.
Make currentNode as NULL
and go to step 3.
d.
If the value to be searched is greater
than that of currentNode, and the
right child of the currentNode is a link:
i.
Make currentNode point to its
right child and go to step 3.
e.
If the value to be searched is greater
than that of currentNode, and the
right child of the currentNode is a
thread:
i.
Mark currentNode as NULL
and go to step 3.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
1.
Mark the left child of the header node as
(Contd.)
Delete 80

currentNode

. 65 .

parent

. 40 .

30

. 72 .
. 50 .

69

60
Ver. 1.0

2.
3.

header node

80

currentNode.
Mark the header node as parent.
Repeat steps a, b, c, d, and e until the node
to be searched is found or currentNode
becomes NULL:
a.
Mark currentNode as parent.
b.
If the value to be searched is less
than that of currentNode, and the left
child of the currentNode is a link:
i.
Make currentNode point to its
left child and go to step 3.
c.
If the value to be searched is less
than that of currentNode, and the left
child of the currentNode is a thread:
i.
Make currentNode as NULL
and go to step 3.
d.
If the value to be searched is greater
than that of currentNode, and the
right child of the currentNode is a link:
i.
Make currentNode point to its
right child and go to step 3.
e.
If the value to be searched is greater
than that of currentNode, and the
right child of the currentNode is a
thread:
i.
Mark currentNode as NULL
and go to step 3.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
1.
Mark the left child of the header node as
(Contd.)
Delete 80

currentNode

. 65 .

parent

. 40 .

30

. 72 .
. 50 .

69

60
Ver. 1.0

2.
3.

header node

80

currentNode.
Mark the header node as parent.
Repeat steps a, b, c, d, and e until the node
to be searched is found or currentNode
becomes NULL:
a.
Mark currentNode as parent.
b.
If the value to be searched is less
than that of currentNode, and the left
child of the currentNode is a link:
i.
Make currentNode point to its
left child and go to step 3.
c.
If the value to be searched is less
than that of currentNode, and the left
child of the currentNode is a thread:
i.
Make currentNode as NULL
and go to step 3.
d.
If the value to be searched is greater
than that of currentNode, and the
right child of the currentNode is a link:
i.
Make currentNode point to its
right child and go to step 3.
e.
If the value to be searched is greater
than that of currentNode, and the
right child of the currentNode is a
thread:
i.
Mark currentNode as NULL
and go to step 3.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
1.
Mark the left child of the header node as
(Contd.)
Delete 80

currentNode

. 65 .

parent

. 40 .

30

. 72 .
. 50 .

69

60
Ver. 1.0

2.
3.

header node

80

currentNode.
Mark the header node as parent.
Repeat steps a, b, c, d, and e until the node
to be searched is found or currentNode
becomes NULL:
a.
Mark currentNode as parent.
b.
If the value to be searched is less
than that of currentNode, and the left
child of the currentNode is a link:
i.
Make currentNode point to its
left child and go to step 3.
c.
If the value to be searched is less
than that of currentNode, and the left
child of the currentNode is a thread:
i.
Make currentNode as NULL
and go to step 3.
d.
If the value to be searched is greater
than that of currentNode, and the
right child of the currentNode is a link:
i.
Make currentNode point to its
right child and go to step 3.
e.
If the value to be searched is greater
than that of currentNode, and the
right child of the currentNode is a
thread:
i.
Mark currentNode as NULL
and go to step 3.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
1.
Mark the left child of the header node as
(Contd.)
Delete 80

2.
3.

header node

currentNode

. 65 .

parent
currentNode

. 40 .

30

. 72 .
. 50 .

69

60
Ver. 1.0

80

currentNode.
Mark the header node as parent.
Repeat steps a, b, c, d, and e until the node
to be searched is found or currentNode
becomes NULL:
a.
Mark currentNode as parent.
b.
If the value to be searched is less
than that of currentNode, and the left
child of the currentNode is a link:
i.
Make currentNode point to its
left child and go to step 3.
c.
If the value to be searched is less
than that of currentNode, and the left
child of the currentNode is a thread:
i.
Make currentNode as NULL
and go to step 3.
d.
If the value to be searched is greater
than that of currentNode, and the
right child of the currentNode is a link:
i.
Make currentNode point to its
right child and go to step 3.
e.
If the value to be searched is greater
than that of currentNode, and the
right child of the currentNode is a
thread:
i.
Mark currentNode as NULL
and go to step 3.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
1.
Mark the left child of the header node as
(Contd.)
Delete 80

2.
3.

header node

. 65 .

parent
currentNode

. 40 .

30

. 72 .
. 50 .

69

60
Ver. 1.0

80

currentNode.
Mark the header node as parent.
Repeat steps a, b, c, d, and e until the node
to be searched is found or currentNode
becomes NULL:
a.
Mark currentNode as parent.
b.
If the value to be searched is less
than that of currentNode, and the left
child of the currentNode is a link:
i.
Make currentNode point to its
left child and go to step 3.
c.
If the value to be searched is less
than that of currentNode, and the left
child of the currentNode is a thread:
i.
Make currentNode as NULL
and go to step 3.
d.
If the value to be searched is greater
than that of currentNode, and the
right child of the currentNode is a link:
i.
Make currentNode point to its
right child and go to step 3.
e.
If the value to be searched is greater
than that of currentNode, and the
right child of the currentNode is a
thread:
i.
Mark currentNode as NULL
and go to step 3.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
1.
Mark the left child of the header node as
(Contd.)
Delete 80

2.
3.

header node

. 65 .

parent
currentNode

. 40 .

30

parent

. 50 .

69

60
Ver. 1.0

. 72 .

80

currentNode.
Mark the header node as parent.
Repeat steps a, b, c, d, and e until the node
to be searched is found or currentNode
becomes NULL:
a.
Mark currentNode as parent.
b.
If the value to be searched is less
than that of currentNode, and the left
child of the currentNode is a link:
i.
Make currentNode point to its
left child and go to step 3.
c.
If the value to be searched is less
than that of currentNode, and the left
child of the currentNode is a thread:
i.
Make currentNode as NULL
and go to step 3.
d.
If the value to be searched is greater
than that of currentNode, and the
right child of the currentNode is a link:
i.
Make currentNode point to its
right child and go to step 3.
e.
If the value to be searched is greater
than that of currentNode, and the
right child of the currentNode is a
thread:
i.
Mark currentNode as NULL
and go to step 3.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
1.
Mark the left child of the header node as
(Contd.)
Delete 80

2.
3.

header node

. 65 .
currentNode

. 40 .

30

parent

. 50 .

69

60
Ver. 1.0

. 72 .

80

currentNode.
Mark the header node as parent.
Repeat steps a, b, c, d, and e until the node
to be searched is found or currentNode
becomes NULL:
a.
Mark currentNode as parent.
b.
If the value to be searched is less
than that of currentNode, and the left
child of the currentNode is a link:
i.
Make currentNode point to its
left child and go to step 3.
c.
If the value to be searched is less
than that of currentNode, and the left
child of the currentNode is a thread:
i.
Make currentNode as NULL
and go to step 3.
d.
If the value to be searched is greater
than that of currentNode, and the
right child of the currentNode is a link:
i.
Make currentNode point to its
right child and go to step 3.
e.
If the value to be searched is greater
than that of currentNode, and the
right child of the currentNode is a
thread:
i.
Mark currentNode as NULL
and go to step 3.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
1.
Mark the left child of the header node as
(Contd.)
Delete 80

2.
3.

header node

. 65 .
currentNode

. 40 .

30

parent

. 50 .

69

60
Ver. 1.0

. 72 .

80

currentNode.
Mark the header node as parent.
Repeat steps a, b, c, d, and e until the node
to be searched is found or currentNode
becomes NULL:
a.
Mark currentNode as parent.
b.
If the value to be searched is less
than that of currentNode, and the left
child of the currentNode is a link:
i.
Make currentNode point to its
left child and go to step 3.
c.
If the value to be searched is less
than that of currentNode, and the left
child of the currentNode is a thread:
i.
Make currentNode as NULL
and go to step 3.
d.
If the value to be searched is greater
than that of currentNode, and the
right child of the currentNode is a link:
i.
Make currentNode point to its
right child and go to step 3.
e.
If the value to be searched is greater
than that of currentNode, and the
right child of the currentNode is a
thread:
i.
Mark currentNode as NULL
and go to step 3.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
1.
Mark the left child of the header node as
(Contd.)
Delete 80

2.
3.

header node

. 65 .
currentNode

. 40 .

30

parent

. 50 .

69

60
Ver. 1.0

. 72 .

80

currentNode.
Mark the header node as parent.
Repeat steps a, b, c, d, and e until the node
to be searched is found or currentNode
becomes NULL:
a.
Mark currentNode as parent.
b.
If the value to be searched is less
than that of currentNode, and the left
child of the currentNode is a link:
i.
Make currentNode point to its
left child and go to step 3.
c.
If the value to be searched is less
than that of currentNode, and the left
child of the currentNode is a thread:
i.
Make currentNode as NULL
and go to step 3.
d.
If the value to be searched is greater
than that of currentNode, and the
right child of the currentNode is a link:
i.
Make currentNode point to its
right child and go to step 3.
e.
If the value to be searched is greater
than that of currentNode, and the
right child of the currentNode is a
thread:
i.
Mark currentNode as NULL
and go to step 3.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
1.
Mark the left child of the header node as
(Contd.)
Delete 80

.
. 40 .

30

Ver. 1.0

currentNode.
2.
Mark the header node as parent.
3.
Repeat steps a, b, c, d, and e until the node
header node
to be searched is found or currentNode
becomes NULL:
a.
Mark currentNode as parent.
b.
If the value to be searched is less
than that of currentNode, and the left
child of the currentNode is a link:
i.
Make currentNode point to its
65
left child and go to step 3.
currentNode
c.
If the value to be searched is less
than that of currentNode, and the left
child of the currentNode is a thread:
72
parent
i.
Make currentNode as NULL
and go to step 3.
d.
If the value to be searched is greater
than that of currentNode, and the
right child of the currentNode is a link:
i.
Make currentNode point to its
69
80
right child and go to step 3.
e.
If the value to be searched is greater
than that of currentNode, and the
currentNode
right child of the currentNode is a
thread:
i.
Mark currentNode as NULL
and go to step 3.
60

. 50 .

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
1.
Mark the left child of the header node as
(Contd.)
Nodes 80
located
Delete

header node

. 65 .
. 40 .

30

parent

. 50 .

69

60
Ver. 1.0

currentNode.
2.
Mark the header node as parent.
3.
Repeat steps a, b, c, d, and e until the node
to be searched is found or currentNode
becomes NULL:
a.
Mark currentNode as parent.
b.
If the value to be searched is less
than that of currentNode, and the left
child of the currentNode is a link:
i.
Make currentNode point to its
left child and go to step 3.
c.
If the value to be searched is less
than that of currentNode, and the left
child of the currentNode is a thread:
72
i.
Make currentNode as NULL
and go to step 3.
d.
If the value to be searched is greater
than that of currentNode, and the
right child of the currentNode is a link:
i.
Make currentNode point to its
80
right child and go to step 3.
e.
If the value to be searched is greater
than that of currentNode, and the
currentNode
right child of the currentNode is a
thread:
i.
Mark currentNode as NULL
and go to step 3.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
(Contd.)
Once you
theisnode
to be
deleted
and
its
parent,
you
Before
implementing
anot
delete
operation,
yoube
first
need
to
However,
iflocate
the tree
empty,
there can
three
cases:
can Node
release
thedeleted
memory
the
node
to be deleted after
check
whether
the
treeis is
empty
or not.
to be
aof
leaf
node
adjusting
the
threads
appropriately.
to
belinks
deleted
has
child
right) node is a
The Node
tree is
empty
ifand
the
leftone
child
of(left
theor
header
thread
pointing
to itself.
Node
to be deleted
has two children
If the tree is empty, an error message is shown.
header node

Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
(Contd.)
Let us first consider a case in which the node to be deleted
is the leaf node.
In this case, you first need to check if there is only one node
present in the tree.

header node

65
new node

Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
(Contd.)
To delete this node, make the left child of the header node
as a thread pointing to itself.

header node

65
new node

Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
(Contd.)
To delete this node, make the left child of the header node
as a thread pointing to itself.
Now release the memory of the node to be deleted.

header node

Delete operation
complete
65
new node

Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
(Contd.)
header node

Delete node 60

However, if there are more than


one nodes in the tree, you need
another algorithm to delete a leaf
. 65 .
node.

. 40 .

30

Locate the position of the node to


be deleted. Mark it as
currentNode and its parent as
parent.

2.

If currentNode is the left child of


parent:
a.
Set the left thread field of
parent as zero.
b.
Make the left child field of
parent as a thread pointing
to the inorder predecessor
of currentNode.
c.
Go to step 4.

3.

If currentNode is the right child of


parent:
a.
Set the right thread field of
parent as zero.
b.
Make the right child field of
parent as a thread pointing
to the inorder successor of
currentNode.

4.

Release the memory for


currentNode.

. 72 .
. 50 .

69

60

Ver. 1.0

1.

80

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
(Contd.)
header node

Delete node 60

. 65 .
. 40 .

30

1.

Locate the position of the node to


be deleted. Mark it as
currentNode and its parent as
parent.

2.

If currentNode is the left child of


parent:
a.
Set the left thread field of
parent as zero.
b.
Make the left child field of
parent as a thread pointing
to the inorder predecessor
of currentNode.
c.
Go to step 4.

3.

If currentNode is the right child of


parent:
a.
Set the right thread field of
parent as zero.
b.
Make the right child field of
parent as a thread pointing
to the inorder successor of
currentNode.

4.

Release the memory for


currentNode.

. 72 .
. 50 .

69

80

parent

60
currentNode
Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
(Contd.)
header node

Delete node 60

. 65 .
. 40 .

30

1.

Locate the position of the node to


be deleted. Mark it as
currentNode and its parent as
parent.

2.

If currentNode is the left child of


parent:
a.
Set the left thread field of
parent as zero.
b.
Make the left child field of
parent as a thread pointing
to the inorder predecessor
of currentNode.
c.
Go to step 4.

3.

If currentNode is the right child of


parent:
a.
Set the right thread field of
parent as zero.
b.
Make the right child field of
parent as a thread pointing
to the inorder successor of
currentNode.

4.

Release the memory for


currentNode.

. 72 .
. 50 .

69

80

parent

60
currentNode
Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
(Contd.)
header node

Delete node 60

. 65 .
. 40 .

30

1.

Locate the position of the node to


be deleted. Mark it as
currentNode and its parent as
parent.

2.

If currentNode is the left child of


parent:
a.
Set the left thread field of
parent as zero.
b.
Make the left child field of
parent as a thread pointing
to the inorder predecessor
of currentNode.
c.
Go to step 4.

3.

If currentNode is the right child of


parent:
a.
Set the right thread field of
parent as zero.
b.
Make the right child field of
parent as a thread pointing
to the inorder successor of
currentNode.

4.

Release the memory for


currentNode.

. 72 .
. 50 .

69

80

parent

60
currentNode
Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
(Contd.)
header node

Delete node 60

. 65 .
. 40 .

30

1.

Locate the position of the node to


be deleted. Mark it as
currentNode and its parent as
parent.

2.

If currentNode is the left child of


parent:
a.
Set the left thread field of
parent as zero.
b.
Make the left child field of
parent as a thread pointing
to the inorder predecessor
of currentNode.
c.
Go to step 4.

3.

If currentNode is the right child of


parent:
a.
Set the right thread field of
parent as zero.
b.
Make the right child field of
parent as a thread pointing
to the inorder successor of
currentNode.

4.

Release the memory for


currentNode.

. 72 .
. 50 .

69

80

parent

60
currentNode
Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
(Contd.)
header node

Delete node 60

. 65 .
. 40 .

30

1.

Locate the position of the node to


be deleted. Mark it as
currentNode and its parent as
parent.

2.

If currentNode is the left child of


parent:
a.
Set the left thread field of
parent as zero.
b.
Make the left child field of
parent as a thread pointing
to the inorder predecessor
of currentNode.
c.
Go to step 4.

3.

If currentNode is the right child of


parent:
a.
Set the right thread field of
parent as zero.
b.
Make the right child field of
parent as a thread pointing
to the inorder successor of
currentNode.

4.

Release the memory for


currentNode.

. 72 .
. 50 .

69

80

parent

60
currentNode
Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
(Contd.)
header node

Delete node 60

. 65 .
. 40 .

30

1.

Locate the position of the node to


be deleted. Mark it as
currentNode and its parent as
parent.

2.

If currentNode is the left child of


parent:
a.
Set the left thread field of
parent as zero.
b.
Make the left child field of
parent as a thread pointing
to the inorder predecessor
of currentNode.
c.
Go to step 4.

3.

If currentNode is the right child of


parent:
a.
Set the right thread field of
parent as zero.
b.
Make the right child field of
parent as a thread pointing
to the inorder successor of
currentNode.

4.

Release the memory for


currentNode.

. 72 .
. 50

69

80

parent

Deletion complete
60
currentNode
Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
(Contd.)
Write an algorithm to delete a node, which has one child in
a threaded binary tree.

Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
(Contd.)
1.
Locate the node to be deleted. Mark it as
header node

Delete node 50

Algorithm
Let us nowtoconsider
delete aanode
case in
with
which
one
thechild
nodefrom
to be
a deleted
threaded
has one child
binary
(left
tree.
or right).

2.

3.

. 65 .

4.

. 40 .

. 72 .

6.

. 50 .

30

5.

69

80
7.

60

8.

9.
Ver. 1.0

currentNode and its parent as parent.


If currentNode has a left subtree:
a.
Mark the left child of current node as
child.
b.
Go to step 4.
If currentNode has a right subtree:
a.
Mark the right child of currentNode as
child.
b.
Go to step 4.
If currentNode is the left child of parent:
a.
Make the left child of parent point to
child.
b.
Go to step 6.
If currentNode is the right child of parent:
a.
Make the right child of parent point to
child.
b.
Go to step 6.
Find the inorder successor and inorder
predecessor of currentNode. Mark them as
successor and predecessor, respectively.
If currentNode has a right child:
a.
Make the left child field of its successor
point to its predecessor and set the left
thread of successor to zero.
b.
Go to step 9.
If currentNode has a left child:
a.
Make the right child of its predecessor
point to its successor and set the right
thread of predecessor to zero.
Release the memory for currentNode.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
(Contd.)
1.
Locate the node to be deleted. Mark it as
header node

Delete node 50

2.

3.

. 65 .
4.

parent

. 40 .

. 72 .

6.

. 50 .

30

5.

69

80
7.

currentNode
60

8.

9.
Ver. 1.0

currentNode and its parent as parent.


If currentNode has a left subtree:
a.
Mark the left child of current node as
child.
b.
Go to step 4.
If currentNode has a right subtree:
a.
Mark the right child of currentNode as
child.
b.
Go to step 4.
If currentNode is the left child of parent:
a.
Make the left child of parent point to
child.
b.
Go to step 6.
If currentNode is the right child of parent:
a.
Make the right child of parent point to
child.
b.
Go to step 6.
Find the inorder successor and inorder
predecessor of currentNode. Mark them as
successor and predecessor, respectively.
If currentNode has a right child:
a.
Make the left child field of its successor
point to its predecessor and set the left
thread of successor to zero.
b.
Go to step 9.
If currentNode has a left child:
a.
Make the right child of its predecessor
point to its successor and set the right
thread of predecessor to zero.
Release the memory for currentNode.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
(Contd.)
1.
Locate the node to be deleted. Mark it as
header node

Delete node 50

2.

3.

. 65 .
4.

parent

. 40 .

. 72 .

6.

. 50 .

30

5.

69

80
7.

currentNode
60

8.

9.
Ver. 1.0

currentNode and its parent as parent.


If currentNode has a left subtree:
a.
Mark the left child of current node as
child.
b.
Go to step 4.
If currentNode has a right subtree:
a.
Mark the right child of currentNode as
child.
b.
Go to step 4.
If currentNode is the left child of parent:
a.
Make the left child of parent point to
child.
b.
Go to step 6.
If currentNode is the right child of parent:
a.
Make the right child of parent point to
child.
b.
Go to step 6.
Find the inorder successor and inorder
predecessor of currentNode. Mark them as
successor and predecessor, respectively.
If currentNode has a right child:
a.
Make the left child field of its successor
point to its predecessor and set the left
thread of successor to zero.
b.
Go to step 9.
If currentNode has a left child:
a.
Make the right child of its predecessor
point to its successor and set the right
thread of predecessor to zero.
Release the memory for currentNode.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
(Contd.)
1.
Locate the node to be deleted. Mark it as
header node

Delete node 50

2.

3.

. 65 .
4.

parent

. 40 .

. 72 .

6.

. 50 .

30

5.

69

80
7.

currentNode
60

8.

9.
Ver. 1.0

currentNode and its parent as parent.


If currentNode has a left subtree:
a.
Mark the left child of current node as
child.
b.
Go to step 4.
If currentNode has a right subtree:
a.
Mark the right child of currentNode as
child.
b.
Go to step 4.
If currentNode is the left child of parent:
a.
Make the left child of parent point to
child.
b.
Go to step 6.
If currentNode is the right child of parent:
a.
Make the right child of parent point to
child.
b.
Go to step 6.
Find the inorder successor and inorder
predecessor of currentNode. Mark them as
successor and predecessor, respectively.
If currentNode has a right child:
a.
Make the left child field of its successor
point to its predecessor and set the left
thread of successor to zero.
b.
Go to step 9.
If currentNode has a left child:
a.
Make the right child of its predecessor
point to its successor and set the right
thread of predecessor to zero.
Release the memory for currentNode.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
(Contd.)
1.
Locate the node to be deleted. Mark it as
header node

Delete node 50

2.

3.

. 65 .
4.

parent

. 40 .

. 72 .

6.

. 50 .

30

5.

69

80
7.

currentNode
60
child
Ver. 1.0

8.

9.

currentNode and its parent as parent.


If currentNode has a left subtree:
a.
Mark the left child of current node as
child.
b.
Go to step 4.
If currentNode has a right subtree:
a.
Mark the right child of currentNode as
child.
b.
Go to step 4.
If currentNode is the left child of parent:
a.
Make the left child of parent point to
child.
b.
Go to step 6.
If currentNode is the right child of parent:
a.
Make the right child of parent point to
child.
b.
Go to step 6.
Find the inorder successor and inorder
predecessor of currentNode. Mark them as
successor and predecessor, respectively.
If currentNode has a right child:
a.
Make the left child field of its successor
point to its predecessor and set the left
thread of successor to zero.
b.
Go to step 9.
If currentNode has a left child:
a.
Make the right child of its predecessor
point to its successor and set the right
thread of predecessor to zero.
Release the memory for currentNode.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
(Contd.)
1.
Locate the node to be deleted. Mark it as
header node

Delete node 50

2.

3.

. 65 .
4.

parent

. 40 .

. 72 .

6.

. 50 .

30

5.

69

80
7.

currentNode
60
child
Ver. 1.0

8.

9.

currentNode and its parent as parent.


If currentNode has a left subtree:
a.
Mark the left child of current node as
child.
b.
Go to step 4.
If currentNode has a right subtree:
a.
Mark the right child of currentNode as
child.
b.
Go to step 4.
If currentNode is the left child of parent:
a.
Make the left child of parent point to
child.
b.
Go to step 6.
If currentNode is the right child of parent:
a.
Make the right child of parent point to
child.
b.
Go to step 6.
Find the inorder successor and inorder
predecessor of currentNode. Mark them as
successor and predecessor, respectively.
If currentNode has a right child:
a.
Make the left child field of its successor
point to its predecessor and set the left
thread of successor to zero.
b.
Go to step 9.
If currentNode has a left child:
a.
Make the right child of its predecessor
point to its successor and set the right
thread of predecessor to zero.
Release the memory for currentNode.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
(Contd.)
1.
Locate the node to be deleted. Mark it as
header node

Delete node 50

2.

3.

. 65 .
4.

parent

. 40 .

. 72 .

6.

. 50 .

30

5.

69

80
7.

currentNode
60
child
Ver. 1.0

8.

9.

currentNode and its parent as parent.


If currentNode has a left subtree:
a.
Mark the left child of current node as
child.
b.
Go to step 4.
If currentNode has a right subtree:
a.
Mark the right child of currentNode as
child.
b.
Go to step 4.
If currentNode is the left child of parent:
a.
Make the left child of parent point to
child.
b.
Go to step 6.
If currentNode is the right child of parent:
a.
Make the right child of parent point to
child.
b.
Go to step 6.
Find the inorder successor and inorder
predecessor of currentNode. Mark them as
successor and predecessor, respectively.
If currentNode has a right child:
a.
Make the left child field of its successor
point to its predecessor and set the left
thread of successor to zero.
b.
Go to step 9.
If currentNode has a left child:
a.
Make the right child of its predecessor
point to its successor and set the right
thread of predecessor to zero.
Release the memory for currentNode.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
(Contd.)
1.
Locate the node to be deleted. Mark it as
header node

Delete node 50

2.

3.

. 65 .
4.

parent

. 40 .

. 72 .

6.

. 50 .

30

5.

69

80
7.

currentNode
60
child
Ver. 1.0

8.

9.

currentNode and its parent as parent.


If currentNode has a left subtree:
a.
Mark the left child of current node as
child.
b.
Go to step 4.
If currentNode has a right subtree:
a.
Mark the right child of currentNode as
child.
b.
Go to step 4.
If currentNode is the left child of parent:
a.
Make the left child of parent point to
child.
b.
Go to step 6.
If currentNode is the right child of parent:
a.
Make the right child of parent point to
child.
b.
Go to step 6.
Find the inorder successor and inorder
predecessor of currentNode. Mark them as
successor and predecessor, respectively.
If currentNode has a right child:
a.
Make the left child field of its successor
point to its predecessor and set the left
thread of successor to zero.
b.
Go to step 9.
If currentNode has a left child:
a.
Make the right child of its predecessor
point to its successor and set the right
thread of predecessor to zero.
Release the memory for currentNode.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
(Contd.)
1.
Locate the node to be deleted. Mark it as
header node

Delete node 50

2.

3.

. 65 .
4.

parent

. 40 .

. 72 .

6.

. 50 .

30

5.

69

80
7.

currentNode
60
child
Ver. 1.0

8.

9.

currentNode and its parent as parent.


If currentNode has a left subtree:
a.
Mark the left child of current node as
child.
b.
Go to step 4.
If currentNode has a right subtree:
a.
Mark the right child of currentNode as
child.
b.
Go to step 4.
If currentNode is the left child of parent:
a.
Make the left child of parent point to
child.
b.
Go to step 6.
If currentNode is the right child of parent:
a.
Make the right child of parent point to
child.
b.
Go to step 6.
Find the inorder successor and inorder
predecessor of currentNode. Mark them as
successor and predecessor, respectively.
If currentNode has a right child:
a.
Make the left child field of its successor
point to its predecessor and set the left
thread of successor to zero.
b.
Go to step 9.
If currentNode has a left child:
a.
Make the right child of its predecessor
point to its successor and set the right
thread of predecessor to zero.
Release the memory for currentNode.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
(Contd.)
1.
Locate the node to be deleted. Mark it as
header node

Delete node 50

2.

3.

. 65 .
4.

parent

. 40 .

. 72 .

6.

. 50 .

30

5.

69

80
7.

currentNode
60
child
Ver. 1.0

8.

9.

currentNode and its parent as parent.


If currentNode has a left subtree:
a.
Mark the left child of current node as
child.
b.
Go to step 4.
If currentNode has a right subtree:
a.
Mark the right child of currentNode as
child.
b.
Go to step 4.
If currentNode is the left child of parent:
a.
Make the left child of parent point to
child.
b.
Go to step 6.
If currentNode is the right child of parent:
a.
Make the right child of parent point to
child.
b.
Go to step 6.
Find the inorder successor and inorder
predecessor of currentNode. Mark them as
successor and predecessor, respectively.
If currentNode has a right child:
a.
Make the left child field of its successor
point to its predecessor and set the left
thread of successor to zero.
b.
Go to step 9.
If currentNode has a left child:
a.
Make the right child of its predecessor
point to its successor and set the right
thread of predecessor to zero.
Release the memory for currentNode.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
(Contd.)
1.
Locate the node to be deleted. Mark it as
header node

Delete node 50

2.

3.

. 65 .

predecessor

4.

parent

. 40 .

. 72 .

6.

. 50 .

30

5.

69

80
7.

currentNode
8.

60
child
Ver. 1.0

successor

9.

currentNode and its parent as parent.


If currentNode has a left subtree:
a.
Mark the left child of current node as
child.
b.
Go to step 4.
If currentNode has a right subtree:
a.
Mark the right child of currentNode as
child.
b.
Go to step 4.
If currentNode is the left child of parent:
a.
Make the left child of parent point to
child.
b.
Go to step 6.
If currentNode is the right child of parent:
a.
Make the right child of parent point to
child.
b.
Go to step 6.
Find the inorder successor and inorder
predecessor of currentNode. Mark them as
successor and predecessor, respectively.
If currentNode has a right child:
a.
Make the left child field of its successor
point to its predecessor and set the left
thread of successor to zero.
b.
Go to step 9.
If currentNode has a left child:
a.
Make the right child of its predecessor
point to its successor and set the right
thread of predecessor to zero.
Release the memory for currentNode.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
(Contd.)
1.
Locate the node to be deleted. Mark it as
header node

Delete node 50

2.

3.

. 65 .

predecessor

4.

parent

. 40 .

. 72 .

6.

. 50 .

30

5.

69

80
7.

currentNode
8.

60
child
Ver. 1.0

successor

9.

currentNode and its parent as parent.


If currentNode has a left subtree:
a.
Mark the left child of current node as
child.
b.
Go to step 4.
If currentNode has a right subtree:
a.
Mark the right child of currentNode as
child.
b.
Go to step 4.
If currentNode is the left child of parent:
a.
Make the left child of parent point to
child.
b.
Go to step 6.
If currentNode is the right child of parent:
a.
Make the right child of parent point to
child.
b.
Go to step 6.
Find the inorder successor and inorder
predecessor of currentNode. Mark them as
successor and predecessor, respectively.
If currentNode has a right child:
a.
Make the left child field of its successor
point to its predecessor and set the left
thread of successor to zero.
b.
Go to step 9.
If currentNode has a left child:
a.
Make the right child of its predecessor
point to its successor and set the right
thread of predecessor to zero.
Release the memory for currentNode.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
(Contd.)
1.
Locate the node to be deleted. Mark it as
header node

Delete node 50

2.

3.

. 65 .

predecessor

4.

parent

. 40 .

. 72 .

6.

. 50 .

30

5.

69

80
7.

currentNode
currentNode
8.

60
child
Ver. 1.0

successor

9.

currentNode and its parent as parent.


If currentNode has a left subtree:
a.
Mark the left child of current node as
child.
b.
Go to step 4.
If currentNode has a right subtree:
a.
Mark the right child of currentNode as
child.
b.
Go to step 4.
If currentNode is the left child of parent:
a.
Make the left child of parent point to
child.
b.
Go to step 6.
If currentNode is the right child of parent:
a.
Make the right child of parent point to
child.
b.
Go to step 6.
Find the inorder successor and inorder
predecessor of currentNode. Mark them as
successor and predecessor, respectively.
If currentNode has a right child:
a.
Make the left child field of its successor
point to its predecessor and set the left
thread of successor to zero.
b.
Go to step 9.
If currentNode has a left child:
a.
Make the right child of its predecessor
point to its successor and set the right
thread of predecessor to zero.
Release the memory for currentNode.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
(Contd.)
1.
Locate the node to be deleted. Mark it as
header node

Delete node 50

2.

3.

. 65 .

predecessor

4.

parent

. 40 .

. 72 .

6.

. 50 .

30

5.

69

80
7.

currentNode
8.

60
child
Ver. 1.0

successor

9.

currentNode and its parent as parent.


If currentNode has a left subtree:
a.
Mark the left child of current node as
child.
b.
Go to step 4.
If currentNode has a right subtree:
a.
Mark the right child of currentNode as
child.
b.
Go to step 4.
If currentNode is the left child of parent:
a.
Make the left child of parent point to
child.
b.
Go to step 6.
If currentNode is the right child of parent:
a.
Make the right child of parent point to
child.
b.
Go to step 6.
Find the inorder successor and inorder
predecessor of currentNode. Mark them as
successor and predecessor, respectively.
If currentNode has a right child:
a.
Make the left child field of its successor
point to its predecessor and set the left
thread of successor to zero.
b.
Go to step 9.
If currentNode has a left child:
a.
Make the right child of its predecessor
point to its successor and set the right
thread of predecessor to zero.
Release the memory for currentNode.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
(Contd.)
1.
Locate the node to be deleted. Mark it as
header node

Delete node 50

2.

3.

. 65 .

predecessor

4.

parent

. 40 .

. 72 .

6.

. 50 .

30

5.

69

80
7.

currentNode

Deletion
complete

60
child

Ver. 1.0

8.

successor

9.

currentNode and its parent as parent.


If currentNode has a left subtree:
a.
Mark the left child of current node as
child.
b.
Go to step 4.
If currentNode has a right subtree:
a.
Mark the right child of currentNode as
child.
b.
Go to step 4.
If currentNode is the left child of parent:
a.
Make the left child of parent point to
child.
b.
Go to step 6.
If currentNode is the right child of parent:
a.
Make the right child of parent point to
child.
b.
Go to step 6.
Find the inorder successor and inorder
predecessor of currentNode. Mark them as
successor and predecessor, respectively.
If currentNode has a right child:
a.
Make the left child field of its successor
point to its predecessor and set the left
thread of successor to zero.
b.
Go to step 9.
If currentNode has a left child:
a.
Make the right child of its predecessor
point to its successor and set the right
thread of predecessor to zero.
Release the memory for currentNode.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
(Contd.)
1.

Locate the position of the node to


be deleted. Mark it as
currentNode.

Write an algorithm
deletehaving
a node, which has two children
Algorithm
to delete to
a node
fromchildren
a threaded
tree. binary 2. Locate the inorder successor of
two
frombinary
a threaded
currentNode. Mark it as
tree.
Inorder_suc and its parent as
Inorder_parent.

Ver. 1.0

3.

Overwrite the data contained in


currentNode with the data
contained in Inorder_suc.

4.

Delete the node marked


Inorder_suc. This node would
have at most one child and can
therefore be deleted by using the
algorithm for one of the following:
a.

Deleting a leaf node.

b.

Deleting a node with one


child.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
(Contd.)
header node

Delete node 40

1.

Locate the position of the node to


be deleted. Mark it as
currentNode.

2.

Locate the inorder successor of


currentNode. Mark it as
Inorder_suc and its parent as
Inorder_parent.

3.

Overwrite the data contained in


currentNode with the data
contained in Inorder_suc.

4.

Delete the node marked


Inorder_suc. This node would
have at most one child and can
therefore be deleted by using the
algorithm for one of the following:

. 65 .
. 40 .
. 50

30

45

Ver. 1.0

. 72 .

69

80

a.

Deleting a leaf node.

b.

Deleting a node with one


child.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
(Contd.)
header node

Delete node 40

1.

Locate the position of the node to


be deleted. Mark it as
currentNode.

2.

Locate the inorder successor of


currentNode. Mark it as
Inorder_suc and its parent as
Inorder_parent.

3.

Overwrite the data contained in


currentNode with the data
contained in Inorder_suc.

4.

Delete the node marked


Inorder_suc. This node would
have at most one child and can
therefore be deleted by using the
algorithm for one of the following:

. 65 .
currentNode

. 40 .
. 50

30

45

Ver. 1.0

. 72 .

69

80

a.

Deleting a leaf node.

b.

Deleting a node with one


child.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
(Contd.)
header node

Delete node 40

1.

Locate the position of the node to


be deleted. Mark it as
currentNode.

2.

Locate the inorder successor of


currentNode. Mark it as
Inorder_suc and its parent as
Inorder_parent.

3.

Overwrite the data contained in


currentNode with the data
contained in Inorder_suc.

4.

Delete the node marked


Inorder_suc. This node would
have at most one child and can
therefore be deleted by using the
algorithm for one of the following:

. 65 .
currentNode

. 40 .

. 72 .
. 50

30

69

Inorder_parent
45

80

a.

Deleting a leaf node.

b.

Deleting a node with one


child.

Inorder_suc
Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
(Contd.)
header node

Delete node 40

1.

Locate the position of the node to


be deleted. Mark it as
currentNode.

2.

Locate the inorder successor of


currentNode. Mark it as
Inorder_suc and its parent as
Inorder_parent.

3.

Overwrite the data contained in


currentNode with the data
contained in Inorder_suc.

4.

Delete the node marked


Inorder_suc. This node would
have at most one child and can
therefore be deleted by using the
algorithm for one of the following:

. 65 .
currentNode

. 40 .

. 72 .
. 50

30

69

Inorder_parent
45

80

a.

Deleting a leaf node.

b.

Deleting a node with one


child.

Inorder_suc
Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
(Contd.)
header node

Delete node 40

1.

Locate the position of the node to


be deleted. Mark it as
currentNode.

2.

Locate the inorder successor of


currentNode. Mark it as
Inorder_suc and its parent as
Inorder_parent.

3.

Overwrite the data contained in


currentNode with the data
contained in Inorder_suc.

4.

Delete the node marked


Inorder_suc. This node would
have at most one child and can
therefore be deleted by using the
algorithm for one of the following:

. 65 .
currentNode

. 45 .

. 72 .
. 50

30

69

Inorder_parent
45

80

a.

Deleting a leaf node.

b.

Deleting a node with one


child.

Inorder_suc
Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
(Contd.)
header node

Delete node 40

1.

Locate the position of the node to


be deleted. Mark it as
currentNode.

2.

Locate the inorder successor of


currentNode. Mark it as
Inorder_suc and its parent as
Inorder_parent.

3.

Overwrite the data contained in


currentNode with the data
contained in Inorder_suc.

4.

Delete the node marked


Inorder_suc. This node would
have at most one child and can
therefore be deleted by using the
algorithm for one of the following:

. 65 .
currentNode

. 45 .

. 72 .
. 50

30

69

Inorder_parent
45

80

a.

Deleting a leaf node.

b.

Deleting a node with one


child.

Inorder_suc
Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
(Contd.)
header node

Delete node 40

1.

Locate the position of the node to


be deleted. Mark it as
currentNode.

2.

Locate the inorder successor of


currentNode. Mark it as
Inorder_suc and its parent as
Inorder_parent.

3.

Overwrite the data contained in


currentNode with the data
contained in Inorder_suc.

4.

Delete the node marked


Inorder_suc. This node would
have at most one child and can
therefore be deleted by using the
algorithm for one of the following:

. 65 .
currentNode

. 45 .

. 72 .
. 50

30

69

Inorder_parent
45

80

a.

Deleting a leaf node.

b.

Deleting a node with one


child.

Inorder_suc
Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree
(Contd.)
header node

Delete node 40

1.

Locate the position of the node to


be deleted. Mark it as
currentNode.

2.

Locate the inorder successor of


currentNode. Mark it as
Inorder_suc and its parent as
Inorder_parent.

3.

Overwrite the data contained in


currentNode with the data
contained in Inorder_suc.

4.

Delete the node marked


Inorder_suc. This node would
have at most one child and can
therefore be deleted by using the
algorithm for one of the following:

. 65 .
currentNode

. 45 .

30

. 72 .

50

69

80

Inorder_parent
45
Inorder_suc
Ver. 1.0

a.

Deleting a leaf node.

b.

Deleting a node with one


child.

Deletion complete
Session 16

Data Structures and Algorithms


Implementing a Height Balanced Tree
In a binary search tree, the time required to search for a
particular value depends upon its height.
The shorter the height, the faster is the search.
However, binary search trees tend to attain large heights
because of continuous insert and delete operations.

Ver. 1.0

Session 16

Data Structures and Algorithms


Defining Height Balanced Tree
Consider
After
inserting
an example
values in
in the
which
specified
you want
order,
to insert
the binary
some
search tree
numeric
values
appears
in a binary
as follows:
search tree in the following order:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1
2
3
4
5
6
7
8

9
10
11

12
13
14
15

Ver. 1.0

Session 16

Data Structures and Algorithms


Defining Height Balanced Tree (Contd.)
This
can binary
be
timesearch
consuming
ifbecomes
the
of values
Assuch
aprocess
the
search
attains
linear
structure.
Now
In
ifresult,
you
a case,
want
the
to very
search
binary
for
atree
value
tree
14
inanumber
the
given
equivalent
binary
stored
intree,
a binary
treeto
is traverse
large.
search
to
a linked
list.
yousearch
will have
all its preceding nodes

In this case, the height of the binary search tree is 15.


before you reach node 14. In this case, you need to make
14 comparisons.
1
2
3
4
5
6
7
8

9
10
11

12
13
14
15

Ver. 1.0

Session 16

Data Structures and Algorithms


Defining Height Balanced Tree (Contd.)
Therefore, such a structure loses its property of a binary
search tree in which after every comparison, the search
operations are reduced to half.
1
2
3
4
5
6
7
8

9
10
11

12
13
14
15

Ver. 1.0

Session 16

Data Structures and Algorithms


Defining Height Balanced Tree (Contd.)
To solve this problem, it is desirable to keep the height of
the tree to a minimum.
Therefore, the following binary search tree can be modified
to reduce its height.
1
2
3

4
5
6

12

7
8

9
10
14

10

11

12
13

11

13

15

14
15

Ver. 1.0

Session 16

Data Structures and Algorithms


Defining Height Balanced Tree (Contd.)
In this
The
Now
height
if case,
you want
ofthe
thetotal
tobinary
search
number
search
for of
a value
tree
comparisons
has
14,now
you been
to
justbeneed
reduced
made
to to
to 4. for
traverse
search
nodes
node814
and
is three.
12, before you reach node 14.
This approach reduces the time to search for a particular
value in a binary search tree.

12

Ver. 1.0

10

14

11

13

15

Session 16

Data Structures and Algorithms


Defining Height Balanced Tree (Contd.)
This can be implemented with the help of a height balanced
tree.

12

Ver. 1.0

10

14

11

13

15

Session 16

Data Structures and Algorithms


Defining Height Balanced Tree (Contd.)
A height balanced tree is a binary tree in which the
difference between the heights of the left subtree and right
subtree of a node is not more than one.
In a height balanced tree, each node has a Balance Factor
(BF) associated with it.
For the tree to be balanced, BF can have three values:
0: A BF value of 0 indicates that the height of the left subtree of
a node is equal to the height of its right subtree.
1: A BF value of 1 indicates that the height of the left subtree is
greater than the height of the right subtree by one. A node in
this state is said to be left heavy.
1: A BF value of 1 indicates that the height of the right
subtree is greater than the height of the left subtree by one. A
node in this state is said to be right heavy.

Ver. 1.0

Session 16

Data Structures and Algorithms


Defining Height Balanced Tree (Contd.)

-1

40

40

40

-1

30

50

30

50

0
60

30

50

0
10

Balanced Binary Search Trees

Ver. 1.0

Session 16

Data Structures and Algorithms


Defining Height Balanced Tree (Contd.)
After inserting a new node in a height balanced tree, the
balance factor of one or more nodes may attain a value
other than 1, 0, or 1.
This makes the tree unbalanced.
In such a case, you first need to locate the pivot node.
A pivot node is the nearest ancestor of the newly inserted
node, which has a balance factor other than 1, 0 or 1.
To restore the balance, you need to perform appropriate
rotations around the pivot node.

Ver. 1.0

Session 16

Data Structures and Algorithms


Defining Height Balanced Tree (Contd.)

-2

40

40

-2

30

50

30

50

0
55

60

35

45

55

0
34

Unbalanced Binary Search Trees

Ver. 1.0

Session 16

Data Structures and Algorithms


Just a minute
In a height balanced tree, the maximum difference between
the height of left and right subtree of a node can
be _________.

Answer:
One

Ver. 1.0

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree
Insert operation in a height balanced tree is similar to that in
a simple binary search tree.
However, inserting a node can make the tree unbalanced.
To restore the balance, you need to perform appropriate
rotations around the pivot node.
This involves two cases:
When the pivot node is initially right heavy and the new node is
inserted in the right subtree of the pivot node.
When the pivot node is initially left heavy and the new node is
inserted in the left subtree of the pivot node.

Ver. 1.0

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
Let us first consider a case in which the pivot node is initially
right heavy and the new node is inserted in the right subtree
of the pivot node.
In this case, after the insertion of a new node, the balance
factor of pivot node becomes 2.
Now there can be two situations in this case:
If a new node is inserted in the right subtree of the right child of
the pivot node.
If the new node is inserted in the left subtree of the right child
of the pivot node.

Ver. 1.0

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
Consider the first case in which a new node is inserted in
the right subtree of the right child of the pivot node.
In this case, the binary tree initially appears as:
-1

X
Pl

Xl

Ver. 1.0

Xr

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
Aftertree
insertion
of a node,unbalanced.
the binary tree appears as:
The
now becomes

-1
-2

-10

X
Pl

Xl

Ver. 1.0

Xr

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
Therestore
To
tree isthe
nowbalance,
balanced.
you need to perform a single left
rotation around the pivot node.
-2

-1

After rotation

-1

Pl

Xl

Ver. 1.0

Xr
Xr

Pl

Xl

Xr
Xr

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
In the second case, a new node is inserted in the left
subtree of X.
In this case, the binary tree initially appears as:
-1

P
0

Y
Pl
Xr
Yl

Ver. 1.0

Yr

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
When a new node is inserted in the left subtree of X, the
binary tree becomes unbalanced.

-1
-2

P
01

-1
0

Y
Pl
Xr
Yl
Yl

Ver. 1.0

Yr

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
Tothe
restore
the balance,
you need
to root
perform
doubleright in
In
first rotation,
the subtree
with
X is arotated
rotation.
such
a way so that the right child of Y now points to X.

-2

P
1

-1

Y
Pl
Xr
Yl

Ver. 1.0

Yr

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
In the first rotation, the subtree with root X is rotated right in
such a way so that the right child of Y now points to X.

-2

P
1

-2
After single right rotation

-1

-1

Pl

Pl
Xr
Yl

Ver. 1.0

-1

Yr

Yl
Yr

Xr

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
In the second rotation, the subtree with root P is rotated left
so that Y is moved upwards to form the root.
The left child of Y now becomes the right child of P.
-2

P
1

-2
After single right rotation

-1

-1

Pl

Pl
Xr
Yl

Ver. 1.0

-1

Yr

Yl
Yr

Xr

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
The
In
thetree
second
is now
rotation,
balanced.
the subtree with root P is rotated left
so that Y is moved upwards to form the root.
The left child of Y now points to P.
0
-2

After single left rotation

-1

-1

-1

X
Pl

Yl

Yl
Yr

Ver. 1.0

Pl

Yr

Xr

Xr

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
Let us now consider another case in which the pivot node is
left heavy and the new node is inserted in the left subtree of
the pivot node.
This further involves two cases:
If a new node is inserted in the left subtree of the left child of
the pivot node.
If the new node is inserted in the right subtree of the left child
of the pivot node.

Ver. 1.0

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
Let us first consider the case in which the new node is
inserted in the left subtree of the left child of the pivot node.
Initially, the binary tree appears as:
1

P
0

X
Pr

Xl

Ver. 1.0

Xr

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
When a new node is inserted in the left subtree of the left
child of the pivot node (P), the tree becomes unbalanced.
1
2

P
0
1

X
Pr

Xl
Xl

Ver. 1.0

Xr

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
To restore the balance, you need to perform a single right
rotation.
2

P
1

X
Pr

Xl

Ver. 1.0

Xr

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
The tree is now balanced.

X
After single right rotation

X
Pr

Xl

Ver. 1.0

Xr

Xl

Xr

Pr

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
Let us now consider a case in which the new node is inserted
in the right subtree of the left child of the pivot node.
Initially, the tree appears as:
1

P
0

X
0

Pr

Xl
Yl

Ver. 1.0

Yr

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
When a new node is inserted in the right subtree of the left
child of pivot node, P, the tree becomes unbalanced.
21

P
-1
0

X
-10

Pr

Xl
Yl

Ver. 1.0

Yr

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
In this case, a double rotation is required to restore the
balance.
2

P
-1

X
-1

Pr

Xl
Yl

Ver. 1.0

Yr

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
A left rotation is performed first in which the subtree with
root X is rotated towards left.
2

P
-1

X
-1

Pr

Xl
Yl

Ver. 1.0

Yr

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
A left rotation is performed first in which the subtree with
root X is rotated towards left.
2

-1
After single left rotation

-1

-1

-1

Pr

Pr
Yr

Xl
Yl

Yr

Yl
Xl

Ver. 1.0

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
In the next step, a single right rotation is performed in which
the subtree with root P is rotated right.
2

-1
After single left rotation

-1

-1

-1

Pr

Pr
Yr

Xl
Yl

Yr

Yl
Xl

Ver. 1.0

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
The
In
thetree
next
is step,
now balanced.
a single right rotation is performed in which
the subtree with root P is rotated right.
2
-1
-1

P
After single right rotation

Pr
Yr

Yl
Xl

Yr

Pr

Yl
Xl

Ver. 1.0

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
Let us
an example
insert35values
50
40consider
30 60
55 80 to10
32 in a binary

search tree and restore its balance whenever required.

Ver. 1.0

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
Insert 50

Tree is balanced
50

40

30

60

55

80

10

35

32

0
50

Ver. 1.0

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
Insert 40

Tree is balanced
50

40

30

60

55

80

10

35

32

01
50
0
40

Ver. 1.0

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
Insert 30
50

40

30

60

55

80

10

35

32

Tree becomes
is balanced
unbalanced

1
2
50
10
40
0
30

A single right rotation restores the balance

Ver. 1.0

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
Insert 30
50

40

30

60

55

80

10

35

32

Tree is now
balanced

0
40

Ver. 1.0

30

50

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
Insert 60
50

40

30

60

55

80

10

35

32

Tree is balanced
now
balanced

-1
0
40
0

-1
0

30

50
0
60

Ver. 1.0

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
Insert 55
50

40

30

60

55

80

10

35

32

Tree becomes
is balanced
unbalanced

-1
-2
40
0

-1
-2

30

50
10
60
0
55

A double rotation restores the balance

Ver. 1.0

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
Insert 55
50

40

30

60

55

80

10

35

32

Tree becomes
unbalanced

-2
40
0

-2

30

50
1
60
0
55

A double rotation restores the balance

Ver. 1.0

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)

50

40

30

60

55

80

10

35

32

Tree becomes
unbalanced

-2
40
0

-2

30

50
1
-1
55
60
0

55

60

A double rotation restores the balance

Ver. 1.0

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)

50

40

30

60

55

80

10

35

32

Tree is
becomes
now
unbalanced
balanced

-2
-1
40
0

-2
0

30

55
0

-10

50

60
0
60

A double rotation restores the balance

Ver. 1.0

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
Insert 80
50

40

30

60

55

80

10

35

32

Tree becomes
is now
balanced
unbalanced

-2
-1
40
0

-1
0

30

55
0

-10

50

60
0
80

A single left rotation restores the balance

Ver. 1.0

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)

50

40

30

60

55

80

10

35

32

Tree is now
balanced

-2
0
55
40
0

-1

40
30

60
55

00

0
-1

30

5050

80
60
0
80

A single left rotation restores the balance

Ver. 1.0

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
Insert 10

Tree is balanced
50

40

30

60

55

80

10

35

32

01
55
10

-1

40

60

0
1

30

50

80

0
10

Ver. 1.0

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
Insert 35

Tree is balanced
50

40

30

60

55

80

10

35

32

1
55

Ver. 1.0

-1

40

60

1
0

30

50

80

10

35

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
Insert 32
50

40

30

60

55

80

10

35

32

Tree is becomes
balanced
unbalanced

1
2
55
1
2

-1

40

60

-10

30

50

80

1
0

10

35
0
32

A double rotation is required to restore the balance


Ver. 1.0

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
Insert 32
50

40

30

60

55

80

10

35

32

Tree is becomes
unbalanced

2
55
2

-1

40

60

-1

30

50

80

10

35
0
32

A double rotation is required to restore the balance


Ver. 1.0

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)

50

40

30

60

55

80

10

35

32

2
55
2

-1

40

60

-12

35

50

80

30

35

10

32

A double rotation is required to restore the balance


Ver. 1.0

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)

50

40

30

60

55

80

10

35

32

Tree is now
balanced

0
55
0

-1

35

60

-1

30

40

0
80

10

32

50

A double rotation is required to restore the balance


Ver. 1.0

Session 16

Data Structures and Algorithms


Just a minute
In which situations do you need to implement a double
rotation to balance the tree?

Answer:
There can be two situations where a double rotation is required
to balance the tree:
If the pivot node is right heavy and the right child of pivot node is
left heavy
If the pivot node is left heavy and the left child of pivot node is
right heavy

Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting Nodes from a Height Balanced Tree
Delete operation in a height balanced tree is same as that in
a normal binary tree.
However, if deletion of a node makes the tree unbalanced,
then you need to perform appropriate rotations to restore
the balance.
This process involves the same concept as used in insertion
of a node.

Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting Nodes from a Height Balanced Tree (Contd.)
Consider the following height balanced binary tree.
1
55

-1

40
-1

70
-1

30

50

-1

60

80

10

35

53

90

0
32

Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting Nodes from a Height Balanced Tree (Contd.)
Let us implement a few delete operations.
1
55

-1

40
-1

70
-1

30

50

-1

60

80

10

35

53

90

0
32

Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting Nodes from a Height Balanced Tree (Contd.)

Delete 53
1
55

1
2

-1

40
-1

70
-1
0

30

50

-1

60

80

10

35

53

90

0
32

Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting Nodes from a Height Balanced Tree (Contd.)

Tree becomes unbalanced


1
55

-1

40
-1

70
0

30

50

-1

60

80

10

35

90

0
32

A double rotation is required to restore the balance


Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting Nodes from a Height Balanced Tree (Contd.)

Tree becomes unbalanced


1
55

-1

40
-1

70
0

30

50

-1

60

80

10

35

90

0
32

Rotate left around node 30


Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting Nodes from a Height Balanced Tree (Contd.)

1
55

-1

40
2
35

70
0
50

-1

60

80

30

90

10

32

Rotate right around node 40


Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting Nodes from a Height Balanced Tree (Contd.)

Tree is now balanced


0
55

-1

35
0

70
-1

30

40

-1

60

80

10

32

50

90

Rotate right around node 40


Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting Nodes from a Height Balanced Tree (Contd.)

Tree becomes unbalanced

Delete 60
0
55

-1
-2

35
0

70
-1

30

40

-1

60

80

10

32

50

90

A single left rotation restores the balance


Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting Nodes from a Height Balanced Tree (Contd.)

Tree becomes balanced


1
55

35
0

-1

30

Ver. 1.0

80
40

10

32

50

70

90

Session 16

Data Structures and Algorithms


Deleting Nodes from a Height Balanced Tree (Contd.)
Tree is balanced

Delete 50
1
55

0
1

35
0

-1
0

30

Ver. 1.0

80
40

10

32

50

70

90

Session 16

Data Structures and Algorithms


Deleting Nodes from a Height Balanced Tree (Contd.)
Tree is balanced

Delete 40
1
55

2
1

35
0

30

Ver. 1.0

80
40

10

32

70

90

Session 16

Data Structures and Algorithms


Deleting Nodes from a Height Balanced Tree (Contd.)
Tree becomes unbalanced

Delete 40
1
2

55

35

Ver. 1.0

80

30

70

90

10

32

Session 16

Data Structures and Algorithms


Deleting Nodes from a Height Balanced Tree (Contd.)
Tree becomes unbalanced
1
2

55

35

80

30

70

90

10

32

A single right rotation is required to restore the balance

Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting Nodes from a Height Balanced Tree (Contd.)
Tree is now balanced
1
55

-1

30

80

10

35

70

90

0
32

A single right rotation is required to restore the balance

Ver. 1.0

Session 16

Data Structures and Algorithms


Storing Data in a Graph
Consider a situation:
You have to visit a set of cities and return back to the original
city in the end.
For this, you need to:
Find the shortest or least expensive path that starts from the
original city, visits each of the desired cities, and then returns
back to the original city.

How will you solve this problem?

Ver. 1.0

Session 16

Data Structures and Algorithms


Storing Data in a Graph (Contd.)
To solve this problem, you need to:
Determine a way of representing the information, pertaining to
the various cities and the distances between the pairs of cities.

Such pair-wise relationships can be represented in the form


of a graph.

Ver. 1.0

Session 16

Data Structures and Algorithms


Defining Graph
A graph is defined as a data structure that consists of a set
of vertices (nodes) and a set of edges (arcs).
It is a collection of data items that are interconnected to
form a network.
There are two types of graphs:
Directed graph
Undirected graph

Ver. 1.0

Session 16

Data Structures and Algorithms


Just a minute
A graph in which any node in a graph is adjacent to all the
other nodes in a graph is called a __________.
1.
2.
3.
4.

Undirected graph
Directed graph
Complete graph
Cyclic graph

Answer:
3. Complete graph

Ver. 1.0

Session 16

Data Structures and Algorithms


Just a minute
Consider the given graph.

Identify the type of graph.


Answer:
The given graph is a directed graph.

Ver. 1.0

Session 16

Data Structures and Algorithms


Summary
In this session, you learned that:
A height balanced tree is a binary tree in which the difference
between the height of the left and right subtree is not more
than one.
A tree becomes unbalanced if any node in the tree attains a
balance factor other than 0, 1, or 1.
If the tree becomes unbalanced, you need to balance the tree
by performing appropriate rotations around the pivot node.
A graph is defined as a data structure that consists of a set of
vertices (nodes) and edges (arcs).
There are two types of graphs:
Directed
Undirected

Ver. 1.0

Session 16

You might also like