Software & Finance





C++ - Binary Tree Traversal





Binary tree is often used in many application. I have given here the sample code for Binary Tree structure, filling elements and traversal in all 3 notations - infix, prefix and postfix. 
 
Note: I have written the code using recursive function.


Source Code


// Program for binary tree stucture and traversal

 

#include <iostream>

#include <string>

 

 

struct BTree

{

    BTree() : data(""), left(NULL), right(NULL), parent(NULL)

    {

    }

 

    BTree(const char* value) : data(value), left(NULL), right(NULL), parent(NULL)

    {

    }

 

    std::string data;

 

    BTree *left;

    BTree *right;

    BTree *parent;

 

    void InsertLeft(const char* value)

    {

        left = new BTree(value);

        left->parent = this;

    }

 

    void InsertRight(const char* value)

    {

        right = new BTree(value);

        right->parent = this;

    }

};

 

int TraverseAndDisplayNode(BTree *node, int notation)

{

    if(node == NULL)

        return -1;

    if(node->parent == NULL)

    {

        if( notation == 0)

            std::cout << "\nThe prefix notation for the expression is: ";

        else if( notation == 1)

            std::cout << "\nThe infix notation for the expression is: ";

        else if( notation == 2)

            std::cout << "\nThe postfix notation for the expression is: ";

    }

 

    if(node->left == NULL && node->right == NULL)

    {

        std::cout << " " << node->data;

        return 0;

    }

   

    if(notation == 0)

    {

        // Prefix notation

        std::cout << " " << node->data;

        TraverseAndDisplayNode(node->left, notation);

        TraverseAndDisplayNode(node->right, notation);

    }

 

    if(notation == 1)

    {

        // Infix notation

        TraverseAndDisplayNode(node->left, notation);

        std::cout << " " << node->data;

        TraverseAndDisplayNode(node->right, notation);

    }

 

    if(notation == 2)

    {

        // Postfix notation

        TraverseAndDisplayNode(node->left, notation);

        TraverseAndDisplayNode(node->right, notation);

        std::cout << " " << node->data;

    }

}

 

int main()

{

    BTree *root = new BTree("+");

   

    root->InsertLeft("*");

    root->InsertRight("%");

 

    BTree *node = root->left;

    node->InsertLeft("2");

    node->InsertRight("4");

 

    node = root->right;

    node->InsertLeft("100");

    node->InsertRight("25");

 

    TraverseAndDisplayNode(root, 1);   

    std::cout << "\n";

 

    TraverseAndDisplayNode(root, 0);   

    std::cout << "\n";

 

    TraverseAndDisplayNode(root, 2);   

    std::cout << "\n";

    return 0;

}

Output


The infix notation for the expression is:  2 * 4 + 100 % 25

 

The prefix notation for the expression is:  + * 2 4 % 100 25

 

The postfix notation for the expression is:  2 4 * 100 25 % +