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) ;
       
}

---------------------------------------------------------------------------------

Comments

Post a Comment

Popular posts from this blog

Count ways to N'th Stair(Order does not matter)

Replace all ‘0’ with ‘5’ in an input Integer

Chocolate Distribution Problem

Remove characters from the first string which are present in the second string

Primality Test ( CodeChef Problem code: PRB01 )