Odd even level difference in a Binary tree

PROBLEM :

Given a a Binary Tree, your task is to complete the function getLevelDiff which  returns the difference between the sum of nodes at odd level and the sum of nodes at even level . The function getLevelDiff  takes only one argument  ie the root of the binary tree .

       2
     /    \
    3     5
For the above tree the odd level sum is 2 and even level sum is 8 thus the difference is 2-8=-6

Input:
The task is to complete the method which takes one argument, root of Binary Tree. There are multiple test cases. For each test case, this method will be called individually.

Output:
The function should return an integer denoting the difference between the sum of nodes at odd level and the sum of nodes at even level

Constraints:
1 <=T<= 30
1 <= Number of nodes<= 20

Example:
Input
2
2
1 2 R 1 3 L
4
10 20 L 10 30 R 20 40 L 20 60 R

Output
-4
60

There are two test cases.  First case represents a tree with 3 nodes and 2 edges where root is 1, left child of 1 is 3 and right child of 1 is 2.   Second test case represents a tree with 4 edges and 5 nodes.

--------------------------------------------------------------------------------
SIMPLE c++ IMPLEMENTATION :
--------------------------------------------------------------------------------

/*You are required to complete this function*/

int height(Node *) ;
void sum_level(Node *,int ,int *,int *,bool ) ;
int getLevelDiff(Node *root)
{
    if(root==NULL)
        return 0;
       
    int h,i,even,odd ;
    bool swap=true ;
    even=0 ;
    odd=0 ;
   
    h=height(root) ;

    for(i=0;i<h;i++)
    {
        sum_level(root,i,&even,&odd,swap) ;
        swap=!swap ;
    }
   
    return odd-even ;
}

int height(Node *root)
{
    if(root==NULL)
        return 0 ;
    int L,R ;
    L=height(root->left) ;
    R=height(root->right) ;
   
    return (L>R?(L+1):(R+1)) ;
}

void sum_level(Node *root,int level,int *even,int *odd,bool swap)
{
    if(root==NULL)
        return ;
       
    if(level==0)
    {
        if(swap==true)
            (*odd)=(*odd)+root->data ;
        else
            (*even)=(*even)+root->data ;
    }
    else
    {
        sum_level(root->left,level-1,&(*even),&(*odd),swap) ;
        sum_level(root->right,level-1,&(*even),&(*odd),swap) ;
    }
}

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

Comments

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 )