Leaf at same level

 Given a Binary Tree, check if all leaves are at same level or not.

Example 1:

Input: 
            1
          /   \
         2     3

Output: 1

Explanation: 
Leaves 2 and 3 are at same level.

Example 2:

Input:
            10
          /    \
        20      30
       /  \        
     10    15

Output: 0

Explanation:
Leaves 10, 15 and 30 are not at same level.


Your Task: 
You dont need to read input or print anything. Complete the function check() which takes root node as input parameter and returns true/false depending on whether all the leaf nodes are at the same level or not.

 

Expected Time Complexity: O(N)
Expected Auxiliary Space: O(height of tree)

 

ANSWER: 

class Solution{
  public:
    /*You are required to complete this method*/
    void solve(Node *root , int level , unordered_map<int , int>&flags )
    {  
        if(root == NULL)
        {
            return;
        }
        if(root ->left == NULL && root->right ==NULL)
        {  
            // cout << root->data << " " << level << " a\n";
            flags[level] =1;
            return;
         
        }
        if(root->left)
        {
            solve(root->left , level+1 , flags);
           
        }
        if(root->right)
        {
            solve(root->right , level +1 , flags);
        }
    }
    bool check(Node *root)
    {
        //Your code here
        unordered_map<int, int>flags;
        int level =0;
        solve(root , level ,flags);
        int cnt =0;
        for(auto x : flags)
        {
            // cout << x.first << " " << x.second << "\n";
            cnt++;
           
        }
        if(cnt >1)
        {
            return false;
        }
        return true;
       
    }
};

Comments