Skip to main content

Left & Right View Of a Binary Tree Made Easy!

When talking about binary trees then the view of a binary tree is something that has the most probability to be asked in a coding interview.
In this blog post, I'm going to talk mainly about the Right & Left views of a binary tree.

There are so many ways available on the internet, that it's really a very difficult task to choose which method you should follow. Suppose, you're using one method for Left View and another method for Right View, now you need to know two different methods for two similar questions. In this blog we'll discuss a single approach by which you can solve both Left View and Right View problems.

 

Before diving directly into the approach we need to understand what exactly is this Right/Left view.
For your better understanding I've created a binary tree :

So let's try to understand the right view for this binary tree. Right View simply means looking at the tree from its right side and the only nodes visible from that view are required to be printed.
So, from the right side at level 0 we can see 1, at level 1 we can see 3 from the right side, and also 2 is being overlapped by 3 so we can't include it in our right view. Similarly, at level 2 we can see 5 and at level 3 we see 6.
So the nodes included in Right View are: 1, 3, 5, 6
Similarly, nodes included in Left View are: 1, 2, 4, 6

"So, it won't be wrong to say the node that appears for the first time at a given view level will be included in that particular view."

Implementing the above-mentioned approach :

Right View

// utility function
void right_view_func(node *root,int *level,int max_level)
{
if(root==NULL)
return ;
if(*level<max_level)
{
cout<<root->data<<" ";
*level=max_level;
};


right_view_func(root->right,level,max_level+1);
right_view_func(root->left,level,max_level+1);
}

// main function
void right_view(node *root)
{
int level=0;
right_view_func(root,&level,1);
}

Left View

// utility function
void left_view_func(node *root,int *level,int max_level)
{
if(root==NULL)
return;
if(*level<max_level)

{
cout<<root->data<<" ";
*level=max_level;
}
left_view_func(root->left,level,max_level+1);
left_view_func(root->right,level,max_level+1);
}

// main function
void left_view(node *root)
{
int level=0;
left_view_func(root,&level,1);
}


I hope this tutorial helped you.
Happy Coding!

Comments

Most Popular Posts

On Which Coding Platform Should I Practice?

Which is the best online platform to practice, how to improve my coding skills? This post is all about giving answers to all such questions. If you're a beginner who has got no idea what programming is then I would recommend you step by step practice any programming language on Hackerrank. Hackerrank has modules that are self-explanatory and would slowly make you understand all the terminologies which are generally used and with practice, you'll be better at it. Moreover, if you're still not able to understand anything you can always search for your answers on GeekForGeeks or HackerEarth both of them provide one of the best tutorials on any topic. If you're an intermediate who's comfortable with any programming language then you can always improve your problem-solving skills studying Data Structures and Algorithms and practicing it. You can also improve by competitive coding. The best place to start with competitive programming according to me would be ...

Least Common Ancestor (LCA) of a BST & Binary Tree

The least Common Ancestor is one of those problems which appear quite complicated, but is pretty straightforward and can be solved easily.  So in this blog, we're going to understand how to find LCA in a BST & a Binary Tree. Given a binary tree and two nodes n1=1 & n2=4, so the first common node for n1 & n2 with the minimum difference in their heights is 3, therefore 3 is the LCA for n1 & n2. Let's discuss where cases to make you understand LCA better: For n1 = 2, n2 = 3  LCA=> 3 For n1 = 4, n2 = 8  LCA=> 5 For n1 = 7, n2 = 9  LCA=> 8 So now let's try to find LCA in a Binary Search Tree: In a binary search tree, the elements to the left of the root are smaller than the root, and elements to the right of the root are greater than the root. We can find the LCA according to the following conditions : Both n1 & n2 are smaller than the root so, LCA will be in the left sub-tree. Both n1 & n2 are greater than the root so, LCA will be in the ...