I was trying to solve this problem.
Problem Statement
You are given a pointer to the root of a binary tree. Print the top view of the binary tree. You only have to complete the function.
For example :
3
/ \
5 2
/ \ / \
1 4 6 7
\ /
9 8
Top View : 1 -> 5 -> 3 -> 2 -> 7
I figured that the answer could be obtained by keeping on going till the leftmost node recursively and then traverse the tree till the rightmost node from the root.
Although I have managed to solve this problem I feel that my solution is just a little hack and not the best possible solution. The function I had written is
/*
struct node
{
int data;
node* left;
node* right;
};
*/
void top_view(node * root)
{
static node* temp = root;
if(root == NULL)
{
return;
}
top_view(root->left);
cout<<root->data<<" ";
if(root == temp)
{
root = root->right;//Don't want to print the root element twice
while(root != NULL)
{
cout<<root->data<<" ";
root = root->right;
}
}
}