TO PRINT THE TOP VIEW OF A TREE:
SUPPOSE THE TREE IS OF STRUCTURE:
50
| |
30 70
| | | |
20 40 60 80
FOR THE ABOVE TREE STRUCTURE THE OUTPUT SHOULD BE OF(INORDER TRAVERSAL) :
20->30->50->70->80
EVERYONE WILL FACE THE PROBLEM IN DOING RECURSION APPROACH.BECAUSE WE CAN'T TRAVERSE THROUGH THE RIGHT SUBTREE
THE APPROACH IS :
1.WHEN THE FUNCTION CALLED FIRST TIME INITIALISE THE STATIC VARIABLE WITH A ROOT.
2.NOW CHECK THE VALUE WITH THE STATIC VARIABLE AND RECURSE THROUGH THE LEFT SUBTREE
3.NOW AFTER RECURSION THE FUNCTION WILL RETURN TO THE CALLED FUNCTION
4.NOW MATCH WITH THE STATIC VARIABLE AND ITERATE THROUGH THE RIGHT TREE.
THE CODE IS HERE:
void top_view(node * root)
{
static struct node* head=root;
if(root->left != NULL)
top_view(root->left);
cout<< root->data<<" ";
if(head==root){
while(head->right){
cout<< head->right->data<<" ";
head=head->right;
}
}
}
SUPPOSE THE TREE IS OF STRUCTURE:
50
| |
30 70
| | | |
20 40 60 80
FOR THE ABOVE TREE STRUCTURE THE OUTPUT SHOULD BE OF(INORDER TRAVERSAL) :
20->30->50->70->80
EVERYONE WILL FACE THE PROBLEM IN DOING RECURSION APPROACH.BECAUSE WE CAN'T TRAVERSE THROUGH THE RIGHT SUBTREE
THE APPROACH IS :
1.WHEN THE FUNCTION CALLED FIRST TIME INITIALISE THE STATIC VARIABLE WITH A ROOT.
2.NOW CHECK THE VALUE WITH THE STATIC VARIABLE AND RECURSE THROUGH THE LEFT SUBTREE
3.NOW AFTER RECURSION THE FUNCTION WILL RETURN TO THE CALLED FUNCTION
4.NOW MATCH WITH THE STATIC VARIABLE AND ITERATE THROUGH THE RIGHT TREE.
THE CODE IS HERE:
void top_view(node * root)
{
static struct node* head=root;
if(root->left != NULL)
top_view(root->left);
cout<< root->data<<" ";
if(head==root){
while(head->right){
cout<< head->right->data<<" ";
head=head->right;
}
}
}
good
ReplyDeletehey good approach.. I also have faced the same difficulty.. Good work Jebasingh..
ReplyDeleteShameel
thank uu
ReplyDelete