Skip to main content

Tree Traversals Made Easy!

In this blog, I'm going to discuss one of the easiest ways by which you can traverse a binary tree.

Structure Of Tree

struct node
{
    int data;
    node *right,*left;
    node(int data)
    {
        this->data=data;
        left=right=NULL;
    }
};

Tree traversal 

Pre-order :  Root -> Left -> Right 

void preorder(node* root)
{
    if(root==NULL) // base condition
        return ;
        cout<data<<" "; // print root
    preorder(root->left); // go to left child
    preorder(root->right); // go to right child
}

In-order : Left -> Root -> Right

void inorder(node* root)
{
    if(root==NULL)
        return ;
    inorder(root->left);
    cout<<root->data<<" ";
    inorder(root->right);
}

Post-order : Left -> Right -> Root 

void postorder(node* root)
{
    if(root==NULL)
        return ;
    postorder(root->left);
        postorder(root->right);
        cout<<root->data<<" ";
}

Sample Main Function
/*
int main() 
node* root = new node(12); 
root->left = new node(10); 
root->right = new node(30); 
root->right->left = new node(25); 
root->right->right = new node(40); 
inorder(root);
        preorder(root);
        postorder(root); 
return 0; 
*/

The above-mentioned approaches are quite similar to each other so if you're able to understand and implement one of them, then others will automatically become easy to understand and implement.
So for 3 different traversals, you don't need to understand 3 different approaches instead you can understand one of the above-mentioned algorithms and the rest will be similar with few minor changes.

Happy Coding!

Comments

Most Popular Posts

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 b...

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 ...

How to Invert A Binary Tree (Iteratively + Recursively)?

Inverting a binary is one of the most common questions being asked these days. Often, seen many times in the ad of AlgoExpert as well. So, what is an inverted binary tree? Inverted binary tree is a simply a mirror image of given binary tree. Example : So, all we need to do is " Swapping left children with right children of a binary tree at every level." Implementation Recursively TreeNode* invertTree(TreeNode* root) { if(root==NULL) return NULL; swap(root->left,root->right); invertTree(root->left); invertTree(root->right); return root; } Iteratively TreeNode* invertTree(TreeNode* root) { if(root==NULL) return NULL; queue<TreeNode*> q; q.push(root); while(!q.empty()) { TreeNode* c= q.front(); q.pop(); swap(c->left,c->right); if(c->left!=NULL) q.push(c->left); if(c->right!=NULL) q.push(c->right); } return root; } I hope this tutorial hel...