Check whether BST contains Dead End
PROBLEM :
Given a Binary search Tree that contains positive integer values greater then 0. The task is to complete the function isDeadEnd which returns true if the BST contains a dead end else returns false. Here Dead End means, we are not able to insert any element after that node.
Examples:
Input :
8
/ \
5 9
/ \
2 7
/
1
Output : Yes
Explanation : Node "1" is the dead End because after that
we cant insert any element.
Input :
8
/ \
7 10
/ / \
2 9 13
Output : Yes
Explanation : We can't insert any element at
node 9.
Input:
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. First line of each test case contains an integer N denoting the no of nodes of the BST . Second line of each test case consists of 'N' space separated integers denoting the elements of the BST. These elements are inserted into BST in the given order.
Output:
The output for each test case will be 1 if the BST contains a dead end else 0.
Constraints:
1<=T<=100
1<=N<=200
Example(To be used only for expected output):
Input:
2
6
8 5 9 7 2 1
6
8 7 10 9 13 2
Output:
1
1
--------------------------------------------------------------------------------
SIMPLE c++ IMPLEMENTATION :
--------------------------------------------------------------------------------
/*The Node structure is
struct Node {
int data;
Node * right, * left;
};*/
/*You are required to complete below method */
int height_tree(Node *) ;
void fill_arr(Node *,int [],int *) ;
bool isLeaf(Node *,int ) ;
bool isDeadEnd(Node *root)
{
if(root==NULL)
return false;
int h,i ;
h=height_tree(root) ;
int arr[h] ;
i=0 ;
fill_arr(root,arr,&i) ;
if(arr[0]==1&&arr[1]==2)
return true ;
for(i=1;i<h-1;i++)
if(arr[i]==arr[i-1]+1&&arr[i]==arr[i+1]-1)
{
if(isLeaf(root,arr[i]))
return true ;
}
return false ;
}
int height_tree(Node *root)
{
if(root==NULL)
return 0 ;
return height_tree(root->left)+height_tree(root->right)+1 ;
}
void fill_arr(Node *root,int arr[],int *curr)
{
if(root==NULL)
return ;
fill_arr(root->left,arr,&(*curr)) ;
arr[(*curr)++]=root->data ;
fill_arr(root->right,arr,&(*curr)) ;
}
bool isLeaf(Node *root,int key)
{
if(root==NULL)
return false ;
if(root->data==key&&(root->left==NULL&&root->right==NULL))
return true ;
if(key<root->data)
return isLeaf(root->left,key) ;
else
return isLeaf(root->right,key) ;
}
---------------------------------------------------------------------------------
Given a Binary search Tree that contains positive integer values greater then 0. The task is to complete the function isDeadEnd which returns true if the BST contains a dead end else returns false. Here Dead End means, we are not able to insert any element after that node.
Examples:
Input :
8
/ \
5 9
/ \
2 7
/
1
Output : Yes
Explanation : Node "1" is the dead End because after that
we cant insert any element.
Input :
8
/ \
7 10
/ / \
2 9 13
Output : Yes
Explanation : We can't insert any element at
node 9.
Input:
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. First line of each test case contains an integer N denoting the no of nodes of the BST . Second line of each test case consists of 'N' space separated integers denoting the elements of the BST. These elements are inserted into BST in the given order.
Output:
The output for each test case will be 1 if the BST contains a dead end else 0.
Constraints:
1<=T<=100
1<=N<=200
Example(To be used only for expected output):
Input:
2
6
8 5 9 7 2 1
6
8 7 10 9 13 2
Output:
1
1
--------------------------------------------------------------------------------
SIMPLE c++ IMPLEMENTATION :
--------------------------------------------------------------------------------
/*The Node structure is
struct Node {
int data;
Node * right, * left;
};*/
/*You are required to complete below method */
int height_tree(Node *) ;
void fill_arr(Node *,int [],int *) ;
bool isLeaf(Node *,int ) ;
bool isDeadEnd(Node *root)
{
if(root==NULL)
return false;
int h,i ;
h=height_tree(root) ;
int arr[h] ;
i=0 ;
fill_arr(root,arr,&i) ;
if(arr[0]==1&&arr[1]==2)
return true ;
for(i=1;i<h-1;i++)
if(arr[i]==arr[i-1]+1&&arr[i]==arr[i+1]-1)
{
if(isLeaf(root,arr[i]))
return true ;
}
return false ;
}
int height_tree(Node *root)
{
if(root==NULL)
return 0 ;
return height_tree(root->left)+height_tree(root->right)+1 ;
}
void fill_arr(Node *root,int arr[],int *curr)
{
if(root==NULL)
return ;
fill_arr(root->left,arr,&(*curr)) ;
arr[(*curr)++]=root->data ;
fill_arr(root->right,arr,&(*curr)) ;
}
bool isLeaf(Node *root,int key)
{
if(root==NULL)
return false ;
if(root->data==key&&(root->left==NULL&&root->right==NULL))
return true ;
if(key<root->data)
return isLeaf(root->left,key) ;
else
return isLeaf(root->right,key) ;
}
---------------------------------------------------------------------------------
ichexsancni Mike Allen https://wakelet.com/wake/nvxru3ZC8LnMbG5VHixvW
ReplyDeletetsonjalassco
laguiWcos-yo2001 Ean Cummings Microsoft Visio Professional
ReplyDeleteCisco Packet Tracer
Link
studunansu
gacamtuna2001 Donald Robinson click
ReplyDeleteThere
uneninel