Print Left View of a Binary Tree in C++

In this tutorial, we are going to print the left view of a Binary Tree in C++.

Left View of a Binary Tree

The left view of a Tree is a set of nodes visible when the tree is looked at from the left side.

Examples:

1.               6
               /   \
              5     4
             / \     \
            3   2     1   
Output: 6 5 3
2.      1
      /   \
    2       3
      \   
        4  
      /   \
     5      6
             \
              7
Output: 1 2 4 5 7

The task is to find all the nodes visible when looked at from the left side of the binary tree. The basic idea is to perform a level order traversal and then print the first element of each level.

Example :

        6
      /   \
     5     4
   /   \    \
  3     2    1

Level order traversal – [ [6],
[5, 4],
[3, 2, 1]
]

Now taking the first element of each level, we get 6 5 3. This is also the required output.

Printing left view of a binary tree in C++

Below is the implementation:

#include <iostream> 
#include <queue>
#include <list>

using namespace std;
int max_level = 0; 

class node
{ 
    public: int data; node *left, *right; 
}; 

node* newNode(int item) 
{ 
    node* temp = new node(); 
    temp->data = item; 
    temp->left = temp->right = NULL; 
    return temp; 
} 
void leftView(node* root) 
{ 
    if (root == NULL) return; 
    
    queue <node *> Q;
    Q.push(root);

    while(!Q.empty())
    {
        int size = Q.size();
        for(int i = 0; i<size; i++)
        {
            node * temp = Q.front();
            Q.pop();
            if(i == 0)
            {
                cout << temp->data << " ";
            } 
            if(temp->left != NULL)
            {
                Q.push(temp->left);
            }
            if(temp->right != NULL)
            {
                Q.push(temp->right);
            }
        }
    }
} 
    
int main() 
{ 
    node* root = newNode(1); 
    root->left = newNode(2); 
    root->right = newNode(3); 
    root->left->right = newNode(4); 
    root->left->right->left = newNode(5); 
    root->left->right->right = newNode(6); 
    root->left->right->right->right = newNode(7); 
    leftView(root); 
    return 0; 
}

Output:

1 2 4 5 7

Also read:

Leave a Reply

Your email address will not be published. Required fields are marked *