Delete a node from BST
PROBLEM :
Given a Binary Search Tree (BST) and a node no 'x' , your task is to delete the node 'x' from the BST . You are required to complete the function deleteNode. You should not read any input from stdin/console. There are multiple test cases. For each test case, this method will be called individually.
Input (only to be used for Expected Output):
The first line of the input contains an integer 'T' denoting the number of test cases. Then 'T' test cases follow. Each test case consists of three lines. Description of test cases is as follows:
The First line of each test case contains an integer 'N' which denotes the no of nodes in the BST. .
The Second line of each test case contains 'N' space separated values of the nodes in the BST.
The Third line of each test case contains an integer 'x' the value of the node to be deleted from the BST.
Output:
You are required to complete the function deleteNode which takes two arguments. The first being the root of the tree, and an integer 'x' denoting the node to be deleted from the BST . The function returns a pointer to the root of the modified BST .
Constraints:
1 <= T <= 50
1 <= N <= 50
Example:
50 50
/ \ delete(20) / \
30 70 ---------> 30 70
/ \ / \ \ / \
20 40 60 80 40 60 80
50 50
/ \ delete(30) / \
30 70 ---------> 40 70
\ / \ / \
40 60 80 60 80
50 60
/ \ delete(50) / \
40 70 ---------> 40 70
/ \ \
60 80 80
--------------------------------------------------------------------------------
SIMPLE c++ IMPLEMENTATION :
--------------------------------------------------------------------------------
/* The structure of a BST node is as follows:
struct node {
int data;
struct node * right, * left;
}; */
node *getMin(node *) ;
node * deleteNode(node *root, int x)
{
if(root==NULL)
return root ;
node *temp ;
if(root->data>x)
root->left=deleteNode(root->left,x) ;
else if(root->data<x)
root->right=deleteNode(root->right,x) ;
else
{
if(root->left==NULL&&root->right==NULL)
{
delete root ;
root=NULL ;
}
else if(root->left==NULL&&root->right!=NULL)
{
temp=root ;
root=root->right ;
delete temp ;
}
else if(root->left!=NULL&&root->right==NULL)
{
temp=root ;
root=root->left ;
delete temp ;
}
else
{
temp=getMin(root->right) ;
root->data=temp->data ;
root->right=deleteNode(root->right,temp->data) ;
}
return root ;
}
return root ;
}
node *getMin(node *root)
{
if(root==NULL)
return root ;
while(root->left!=NULL)
root=root->left ;
return root ;
}
---------------------------------------------------------------------------------
Given a Binary Search Tree (BST) and a node no 'x' , your task is to delete the node 'x' from the BST . You are required to complete the function deleteNode. You should not read any input from stdin/console. There are multiple test cases. For each test case, this method will be called individually.
Input (only to be used for Expected Output):
The first line of the input contains an integer 'T' denoting the number of test cases. Then 'T' test cases follow. Each test case consists of three lines. Description of test cases is as follows:
The First line of each test case contains an integer 'N' which denotes the no of nodes in the BST. .
The Second line of each test case contains 'N' space separated values of the nodes in the BST.
The Third line of each test case contains an integer 'x' the value of the node to be deleted from the BST.
Output:
You are required to complete the function deleteNode which takes two arguments. The first being the root of the tree, and an integer 'x' denoting the node to be deleted from the BST . The function returns a pointer to the root of the modified BST .
Constraints:
1 <= T <= 50
1 <= N <= 50
Example:
50 50
/ \ delete(20) / \
30 70 ---------> 30 70
/ \ / \ \ / \
20 40 60 80 40 60 80
50 50
/ \ delete(30) / \
30 70 ---------> 40 70
\ / \ / \
40 60 80 60 80
50 60
/ \ delete(50) / \
40 70 ---------> 40 70
/ \ \
60 80 80
--------------------------------------------------------------------------------
SIMPLE c++ IMPLEMENTATION :
--------------------------------------------------------------------------------
/* The structure of a BST node is as follows:
struct node {
int data;
struct node * right, * left;
}; */
node *getMin(node *) ;
node * deleteNode(node *root, int x)
{
if(root==NULL)
return root ;
node *temp ;
if(root->data>x)
root->left=deleteNode(root->left,x) ;
else if(root->data<x)
root->right=deleteNode(root->right,x) ;
else
{
if(root->left==NULL&&root->right==NULL)
{
delete root ;
root=NULL ;
}
else if(root->left==NULL&&root->right!=NULL)
{
temp=root ;
root=root->right ;
delete temp ;
}
else if(root->left!=NULL&&root->right==NULL)
{
temp=root ;
root=root->left ;
delete temp ;
}
else
{
temp=getMin(root->right) ;
root->data=temp->data ;
root->right=deleteNode(root->right,temp->data) ;
}
return root ;
}
return root ;
}
node *getMin(node *root)
{
if(root==NULL)
return root ;
while(root->left!=NULL)
root=root->left ;
return root ;
}
---------------------------------------------------------------------------------
Comments
Post a Comment