Anda di halaman 1dari 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 an algorithm to locate thebinary to berefers to in a Delete operation in a threaded node tree deleted the threadedof removing the specified node from the threaded process binary tree. 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 (Contd.)
1. Mark the left child of the header node as 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.

Delete 80

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

header node to locate the

2. 3.

. 65 . . 40 . . 72 .

30

. 50 .

69

80

60
Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree (Contd.)
1. Mark the left child of the header node as 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.

Delete 80

header node

2. 3.

currentNode

. 65 . . 72 .

. 40 .

30

. 50 .

69

80

60
Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree (Contd.)
1. Mark the left child of the header node as 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.

Delete 80

parent header node

2. 3.

currentNode

. 65 . . 72 .

. 40 .

30

. 50 .

69

80

60
Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree (Contd.)
1. Mark the left child of the header node as 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.

Delete 80

parent header node

2. 3.

currentNode

. 65 . . 72 .

. 40 .

30

. 50 .

69

80

60
Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree (Contd.)
1. Mark the left child of the header node as 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.

Delete 80

parent header node

2. 3.

currentNode

. 65 .

parent

. 40 .

. 72 .

30

. 50 .

69

80

60
Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree (Contd.)
1. Mark the left child of the header node as 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.

Delete 80

header node

2. 3.

currentNode

. 65 .

parent

. 40 .

. 72 .

30

. 50 .

69

80

60
Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree (Contd.)
1. Mark the left child of the header node as 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.

Delete 80

header node

2. 3.

currentNode

. 65 .

parent

. 40 .

. 72 .

30

. 50 .

69

80

60
Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree (Contd.)
1. Mark the left child of the header node as 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.

Delete 80

header node

2. 3.

currentNode

. 65 .

parent

. 40 .

. 72 .

30

. 50 .

69

80

60
Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree (Contd.)
1. Mark the left child of the header node as 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.

Delete 80

header node

2. 3.

currentNode

. 65 .

parent currentNode

. 40 .

. 72 .

30

. 50 .

69

80

60
Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree (Contd.)
1. Mark the left child of the header node as 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.

Delete 80

header node

2. 3.

. 65 . . 40 .

parent currentNode

. 72 .

30

. 50 .

69

80

60
Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree (Contd.)
1. Mark the left child of the header node as 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.

Delete 80

header node

2. 3.

. 65 . . 40 .

parent currentNode

parent

. 72 .

30

. 50 .

69

80

60
Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree (Contd.)
1. Mark the left child of the header node as 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.

Delete 80

header node

2. 3.

. 65 .
currentNode

. 40 .

parent

. 72 .

30

. 50 .

69

80

60
Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree (Contd.)
1. Mark the left child of the header node as 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.

Delete 80

header node

2. 3.

. 65 .
currentNode

. 40 .

parent

. 72 .

30

. 50 .

69

80

60
Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree (Contd.)
1. Mark the left child of the header node as 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.

Delete 80

header node

2. 3.

. 65 .
currentNode

. 40 .

parent

. 72 .

30

. 50 .

69

80

60
Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree (Contd.)
Delete 80
Mark the left child of the header node as 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: parent 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 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 1.

. . 40 .

30

. 50 .

Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree (Contd.)
Nodes located Delete 80
header node
Mark the left child of the header node as 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. 1.

. 65 . . 40 .
parent

30

. 50 .

69

60
Ver. 1.0

Session 16

Data Structures and Algorithms


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

Once you if the tree isanot empty, there can be three cases: Before implementingnode to be deleted and its parent, to However, locate the delete operation, you first need you can Node to be deleted is isof the node to be deleted after release the memory empty or check whether the tree a leaf node not. adjustingis empty if thethreads appropriately. node is a The Node to be deleted has one child (left or right) tree the links and left child of the header thread pointingdeleted has two children Node to be to itself. 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

1.

However, if there are more than one nodes in the tree, you need another algorithm to delete a leaf . 65 . node.

Locate the position of the node to be deleted. Mark it as currentNode and its parent as parent.

2.

. 40 .

. 72 .
3.

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.
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. Release the memory for currentNode.

30

. 50 .

69

80

4.

60

Ver. 1.0

Session 16

Data Structures and Algorithms


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

Delete node 60

1.

Locate the position of the node to be deleted. Mark it as currentNode and its parent as parent.

2.

. 65 . . 40 . . 72 .
3.

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.
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. Release the memory for currentNode.

30

. 50 .
parent

69

80

4.

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

1.

Locate the position of the node to be deleted. Mark it as currentNode and its parent as parent.

2.

. 65 . . 40 . . 72 .
3.

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.
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. Release the memory for currentNode.

30

. 50 .
parent

69

80

4.

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

1.

Locate the position of the node to be deleted. Mark it as currentNode and its parent as parent.

2.

. 65 . . 40 . . 72 .
3.

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.
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. Release the memory for currentNode.

30

. 50 .
parent

69

80

4.

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

1.

Locate the position of the node to be deleted. Mark it as currentNode and its parent as parent.

2.

. 65 . . 40 . . 72 .
3.

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.
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. Release the memory for currentNode.

30

. 50 .
parent

69

80

4.

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

1.

Locate the position of the node to be deleted. Mark it as currentNode and its parent as parent.

2.

. 65 . . 40 . . 72 .
3.

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.
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. Release the memory for currentNode.

30

. 50 .
parent

69

80

4.

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

1.

Locate the position of the node to be deleted. Mark it as currentNode and its parent as parent.

2.

. 65 . . 40 . . 72 .
3.

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.
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. Release the memory for currentNode.

30

. 50
parent

69

80

Deletion complete
4.

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.)
Delete node 50
header node
1. 2. Locate the node to be deleted. Mark it as 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.

Algorithm to delete aa case in Let us now consider node with one child from a deleted which the node to be threadedchild (left or right). has one binary tree.

3.

. 65 .

4.

. 40 .

. 72 .

5.

6.

30

. 50 .

69

80
7.

8.

60
9.
Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree (Contd.)
Delete node 50
header node
1. 2. Locate the node to be deleted. Mark it as 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.

3.

. 65 .
parent
4.

. 40 .

. 72 .

5.

6.

30

. 50 .
currentNode

69

80
7.

8.

60
9.
Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree (Contd.)
Delete node 50
header node
1. 2. Locate the node to be deleted. Mark it as 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.

3.

. 65 .
parent
4.

. 40 .

. 72 .

5.

6.

30

. 50 .
currentNode

69

80
7.

8.

60
9.
Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree (Contd.)
Delete node 50
header node
1. 2. Locate the node to be deleted. Mark it as 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.

3.

. 65 .
parent
4.

. 40 .

. 72 .

5.

6.

30

. 50 .
currentNode

69

80
7.

8.

60
9.
Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree (Contd.)
Delete node 50
header node
1. 2. Locate the node to be deleted. Mark it as 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.

3.

. 65 .
parent
4.

. 40 .

. 72 .

5.

6.

30

. 50 .
currentNode

69

80
7.

8.

60 child
Ver. 1.0

9.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree (Contd.)
Delete node 50
header node
1. 2. Locate the node to be deleted. Mark it as 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.

3.

. 65 .
parent
4.

. 40 .

. 72 .

5.

6.

30

. 50 .
currentNode

69

80
7.

8.

60 child
Ver. 1.0

9.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree (Contd.)
Delete node 50
header node
1. 2. Locate the node to be deleted. Mark it as 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.

3.

. 65 .
parent
4.

. 40 .

. 72 .

5.

6.

30

. 50 .
currentNode

69

80
7.

8.

60 child
Ver. 1.0

9.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree (Contd.)
Delete node 50
header node
1. 2. Locate the node to be deleted. Mark it as 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.

3.

. 65 .
parent
4.

. 40 .

. 72 .

5.

6.

30

. 50 .
currentNode

69

80
7.

8.

60 child
Ver. 1.0

9.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree (Contd.)
Delete node 50
header node
1. 2. Locate the node to be deleted. Mark it as 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.

3.

. 65 .
parent
4.

. 40 .

. 72 .

5.

6.

30

. 50 .
currentNode

69

80
7.

8.

60 child
Ver. 1.0

9.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree (Contd.)
Delete node 50
header node
1. 2. Locate the node to be deleted. Mark it as 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.

3.

. 65 .
parent
4.

. 40 .

. 72 .

5.

6.

30

. 50 .
currentNode

69

80
7.

8.

60 child
Ver. 1.0

9.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree (Contd.)
Delete node 50
header node
1. 2. Locate the node to be deleted. Mark it as 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.

3.

predecessor parent

. 65 .
4.

. 40 .

. 72 .

5.

6.

30

. 50 .
currentNode

69

80
7.

8.

60 child
Ver. 1.0

successor

9.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree (Contd.)
Delete node 50
header node
1. 2. Locate the node to be deleted. Mark it as 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.

3.

predecessor parent

. 65 .
4.

. 40 .

. 72 .

5.

6.

30

. 50 .
currentNode

69

80
7.

8.

60 child
Ver. 1.0

successor

9.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree (Contd.)
Delete node 50
header node
1. 2. Locate the node to be deleted. Mark it as 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.

3.

predecessor parent

. 65 .
4.

. 40 .

. 72 .

5.

6.

30

. 50 .
currentNode currentNode

69

80
7.

8.

60 child
Ver. 1.0

successor

9.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree (Contd.)
Delete node 50
header node
1. 2. Locate the node to be deleted. Mark it as 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.

3.

predecessor parent

. 65 .
4.

. 40 .

. 72 .

5.

6.

30

. 50 .
currentNode

69

80
7.

8.

60 child
Ver. 1.0

successor

9.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree (Contd.)
Delete node 50
header node
1. 2. Locate the node to be deleted. Mark it as 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.

3.

predecessor parent

. 65 .
4.

. 40 .

. 72 .

5.

6.

30

. 50 .
currentNode

69

80
7.

Deletion complete

8.

60 child
Ver. 1.0

successor

9.

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 to node having which has two children Algorithm to delete a delete a node, fromchildren from a threaded binary 2. Locate the inorder successor of two a threaded binary tree. currentNode. Mark it as tree.
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: a. b. Deleting a leaf node. Deleting a node with one child.

Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree (Contd.)
Delete node 40
header node
1. Locate the position of the node to be deleted. Mark it as currentNode. Locate the inorder successor of currentNode. Mark it as Inorder_suc and its parent as Inorder_parent. Overwrite the data contained in currentNode with the data contained in Inorder_suc. 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. b. Deleting a leaf node. Deleting a node with one child.

2.

. 65 .
3.

. 40 .

. 72 .
4.

30

. 50

69

80

45

Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree (Contd.)
Delete node 40
header node
1. Locate the position of the node to be deleted. Mark it as currentNode. Locate the inorder successor of currentNode. Mark it as Inorder_suc and its parent as Inorder_parent. Overwrite the data contained in currentNode with the data contained in Inorder_suc. 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. b. Deleting a leaf node. Deleting a node with one child.

2.

. 65 .
currentNode
3.

. 40 .

. 72 .
4.

30

. 50

69

80

45

Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree (Contd.)
Delete node 40
header node
1. Locate the position of the node to be deleted. Mark it as currentNode. Locate the inorder successor of currentNode. Mark it as Inorder_suc and its parent as Inorder_parent. Overwrite the data contained in currentNode with the data contained in Inorder_suc. 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. Deleting a node with one child.

2.

. 65 .
currentNode
3.

. 40 .

. 72 .
4.

30

. 50

69

80

Inorder_parent 45 Inorder_suc
Ver. 1.0

b.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree (Contd.)
Delete node 40
header node
1. Locate the position of the node to be deleted. Mark it as currentNode. Locate the inorder successor of currentNode. Mark it as Inorder_suc and its parent as Inorder_parent. Overwrite the data contained in currentNode with the data contained in Inorder_suc. 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. Deleting a node with one child.

2.

. 65 .
currentNode
3.

. 40 .

. 72 .
4.

30

. 50

69

80

Inorder_parent 45 Inorder_suc
Ver. 1.0

b.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree (Contd.)
Delete node 40
header node
1. Locate the position of the node to be deleted. Mark it as currentNode. Locate the inorder successor of currentNode. Mark it as Inorder_suc and its parent as Inorder_parent. Overwrite the data contained in currentNode with the data contained in Inorder_suc. 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. Deleting a node with one child.

2.

. 65 .
currentNode
3.

. 45 .

. 72 .
4.

30

. 50

69

80

Inorder_parent 45 Inorder_suc
Ver. 1.0

b.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree (Contd.)
Delete node 40
header node
1. Locate the position of the node to be deleted. Mark it as currentNode. Locate the inorder successor of currentNode. Mark it as Inorder_suc and its parent as Inorder_parent. Overwrite the data contained in currentNode with the data contained in Inorder_suc. 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. Deleting a node with one child.

2.

. 65 .
currentNode
3.

. 45 .

. 72 .
4.

30

. 50

69

80

Inorder_parent 45 Inorder_suc
Ver. 1.0

b.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree (Contd.)
Delete node 40
header node
1. Locate the position of the node to be deleted. Mark it as currentNode. Locate the inorder successor of currentNode. Mark it as Inorder_suc and its parent as Inorder_parent. Overwrite the data contained in currentNode with the data contained in Inorder_suc. 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. Deleting a node with one child.

2.

. 65 .
currentNode
3.

. 45 .

. 72 .
4.

30

. 50

69

80

Inorder_parent 45 Inorder_suc
Ver. 1.0

b.

Session 16

Data Structures and Algorithms


Deleting a Node from a Threaded Binary Tree (Contd.)
Delete node 40
header node
1. Locate the position of the node to be deleted. Mark it as currentNode. Locate the inorder successor of currentNode. Mark it as Inorder_suc and its parent as Inorder_parent. Overwrite the data contained in currentNode with the data contained in Inorder_suc. 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. Deleting a node with one child.

2.

. 65 .
currentNode
3.

. 45 .

. 72 .
4.

30

50

69

80

Inorder_parent 45

b.

Deletion complete
Inorder_suc
Ver. 1.0

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 an example in which you want to the binary After inserting values in the specified order,insert some numeric values in a as follows: search tree appearsbinary 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 processwantbinary search a value 14 in numberstructure. Assuchyou the thevery time consuming if the the given values In a if a case, to binary for tree attains a linear of binary Now result, can be search search tree becomes equivalent stored intree, yousearch treeto traverse all its preceding nodes to a linkedbinary will have is binary searchcase, the height of thelarge. search tree is 15. In this a list.

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 4 6

7 8 6 10

12 9

10 14

11 15

12 13 14 15

11

13

Ver. 1.0

Session 16

Data Structures and Algorithms


Defining Height Balanced Tree (Contd.)

In this you of the binary search comparisons just need to Now if case, the to search for a tree has you to be made to The height want total number of value 14,now been reduced search traverse nodes 14 is 12, before you reach node 14. to 4. for node8 and three. This approach reduces the time to search for a particular value in a binary search tree.

12

10

14

11

13

15

Ver. 1.0

Session 16

Data Structures and Algorithms


Defining Height Balanced Tree (Contd.)

This can be implemented with the help of a height balanced tree.

12

10

14

11

13

15

Ver. 1.0

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 0 30 -1 50 0 60 0 30

0 40 0 50 0 1 30

40
0 50

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 0 30 -2 50 1 60 0 55 0 34 2 30 1

1 40 0 50 0 0

35

45

55

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

Xr

Ver. 1.0

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)

After insertion of a node, the binary The tree now becomes unbalanced.tree appears as:

-1 -2

-1 0

X
Pl

Xl

Xr

Ver. 1.0

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)

The tree is now balanced. To restore the balance, you need to perform a single left rotation around the pivot node.
-2

After rotation

-1

-1

X
0

X
Pl

Xl

Xr Xr

Pl

Xl

Xr Xr

Ver. 1.0

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 Yr

Ver. 1.0

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
0 1

-1 0

Y
Pl Xr Yl Yl Yr

Ver. 1.0

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)

To restore the balance, you need to perform rotated right in In the first rotation, the subtree with root X is a double rotation. such a way so that the right child of Y now points to X.

-2

P
1

-1

X Y
Pl Xr Yl Yr

Ver. 1.0

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

-2
After single right rotation

P
1

-1

P
-1

X Y
Pl Xr Yl Yr Pl Yl

Y
-1

Yr

Xr

Ver. 1.0

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 -2
After single right rotation

P
1

-1

P
-1

X Y
Pl Xr Yl Yr Pl Yl

Y
-1

Yr

Xr

Ver. 1.0

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)

The tree is now balanced. 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 points to P.
0 -2
After single left rotation

Y
0 -1

P
-1

Y
-1

P X

Pl

Yl Yr Pl Xr

Yl

Yr

Xr

Ver. 1.0

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

Xr

Ver. 1.0

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

Xr

Ver. 1.0

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

Xr

Ver. 1.0

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)

The tree is now balanced.

P
1

X
After single right rotation

X
Pr Xl

Xl

Xr

Xr

Pr

Ver. 1.0

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

Y
Xl
Yl Yr

Pr

Ver. 1.0

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.
2 1

P
-1 0

X
-1 0

Y
Xl
Yl Yr

Pr

Ver. 1.0

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

Y
Xl
Yl Yr

Pr

Ver. 1.0

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

Y
Xl
Yl Yr

Pr

Ver. 1.0

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 2 -1
After single left rotation

P
-1

Y
-1

X
-1

X
Pr Yr Pr

Y
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 2 -1
After single left rotation

P
-1

Y
-1

X
-1

X
Pr Yr Pr

Y
Xl
Yl Yr

Yl Xl

Ver. 1.0

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)

The tree is now a single right rotation is performed in which In the next step,balanced. the subtree with root P is rotated right.
2 -1 0

P
After single right rotation

Y
1 0

Y
-1

X
Pr Yr Yl Xl

Yl

Xl

Yr

Pr

Ver. 1.0

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)

Let 40 30 60 55 80 insert values in a binary 50 us consider an example to10 35 32 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 50 40 30 60 55
0 50

Tree is balanced 80 10 35 32

Ver. 1.0

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
Insert 40 50 40 30 60 55
0 1 50 0 40

Tree is balanced 80 10 35 32

Ver. 1.0

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
Insert 30 50 40 30 60 55
2 1 50 1 0 40 0 30

80

10

35

32

Tree is balanced becomes unbalanced

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
0 40 0 0

80

10

35

32

Tree is now balanced

30

50

Ver. 1.0

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
Insert 60 50 40 30 60 55
-1 0 40 0 -1 0

80

10

35

32

Tree is now balanced balanced

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
-2 -1 40 0 -2 -1

80

10

35

32

Tree is balanced becomes unbalanced

30

50
1 0 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
-2 40 0 -2

80

10

35

32

Tree becomes unbalanced

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.)
Tree becomes unbalanced

50

40

30

60

55
-2 40

80

10

35

32

-2

30

50
1 -1 60 55 0 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.)
Tree becomes is now balanced unbalanced

50

40

30

60

55
-2 -1 40

80

10

35

32

-2 0

30
0 50

55
-1 0 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
-2 -1 40 0 -1 0

80

10

35

32

Tree is now becomes unbalanced balanced

30
0 50

55
-1 0 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.)
Tree is now balanced

50

40

30

60

55
-2 0 40 55

80

10

35

32

-1

30 40
0 30 00 50 50

55 60
-1 0 60 80 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 50 40 30 60 55
0 1 55 1 0 -1

Tree is balanced 80 10 35 32

40
1 0 30 0 0 50

60
0 80

10

Ver. 1.0

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
Insert 35 50 40 30 60 55
1 55 1 -1

Tree is balanced 80 10 35 32

40
1 0 30 0 0 0 50

60
0 80

10

35

Ver. 1.0

Session 16

Data Structures and Algorithms


Inserting Nodes in a Height Balanced Tree (Contd.)
Insert 32 50 40 30 60 55
2 1 55 2 1 -1

80

10

35

32

Tree is balanced becomes unbalanced

40
-1 0 30 0 1 0 0 50

60
0 80

10
0 32

35

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
2 55 2 -1

80

10

35

32

Tree is becomes unbalanced

40
-1 30 0 1 0 50

60
0 80

10
0 32

35

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
2 55

80

10

35

32

-1

40
-1 2 35 0 1 0 50

60
0 80

30
0 10 0 32

35

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.)
Tree is now balanced

50

40

30

60

55
0 55

80

10

35

32

-1

35
0 30 0 10 0 32 -1 40

60
0 80 0 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 30 0 10 0 32 1 35 -1 50 0 53 0 60 -1 70 -1 80 0 90

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 30 0 10 0 32 1 35 -1 50 0 53 0 60 -1 70 -1 80 0 90

Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting Nodes from a Height Balanced Tree (Contd.)

Delete 53
1
55 2 1 40 -1 30 0 10 0 32 1 35 -1 0 50 0 53 0 60 -1 70 -1 80 0 90

Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting Nodes from a Height Balanced Tree (Contd.)

Tree becomes unbalanced


1
55 2 40 -1 30 0 10 0 32 1 35 0 50 0 60 -1 70 -1 80 0 90

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 2 40 -1 30 0 10 0 32 1 35 0 50 0 60 -1 70 -1 80 0 90

Rotate left around node 30

Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting Nodes from a Height Balanced Tree (Contd.)

1
55 2 40 2 35 0 30 0 10 0 32 0 50 0 60 -1 70 -1 80 0 90

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 0 35 0 30 0 10 0 32 -1 40 0 50 0 60 -1 70 -1 80 0 90

Rotate right around node 40

Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting Nodes from a Height Balanced Tree (Contd.)

Delete 60
0
55 0 35 0 30 0 10 0 32 -1 40 0 50 0 60 -2 -1 70 -1 80 0 90

Tree becomes unbalanced

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 0 35 0 30 0 10 0 32 -1 40 0 50 0 0 80 0

70

90

Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting Nodes from a Height Balanced Tree (Contd.)
Tree is balanced
1
55 1 0 35 0 30 0 10 0 32 -1 0 40 0 50 0 0 80 0

Delete 50

70

90

Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting Nodes from a Height Balanced Tree (Contd.)
Tree is balanced
1
55 2 1 35 0 30 0 10 0 32 0 40 0 0 80 0

Delete 40

70

90

Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting Nodes from a Height Balanced Tree (Contd.)
Tree becomes unbalanced
1
55 2 35 0 30 0 10 0 32 0 0 80 0

Delete 40

70

90

Ver. 1.0

Session 16

Data Structures and Algorithms


Deleting Nodes from a Height Balanced Tree (Contd.)
Tree becomes unbalanced
1
55 2 35 0 30 0 10 0 32 0 0 80 0

70

90

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
-1 30 0 10 0 32 1 35 0 55 0 80 0

70

90

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

Anda mungkin juga menyukai