Solved programming problem

Write a program to traverse a tree in In-order sequence without Recursion.

Source code

#include<iostream>

#include<conio.h>

using namespace std;

struct tree

{

    int data;

    tree *left, *right;

};

typedef struct tree node;

node *root=NULL,*temp=NULL,*ptr=NULL;

struct N

{

    tree *p;

    N *next;

};

typedef struct N NODE;

NODE *top=NULL,*new_ptr=NULL,*q=NULL;

void create()

{

    int value,i=0,n;

    cout<<"Enter Total Node Node Number: ";

    cin>>n;

    while (i < n)

    {

        if (root == NULL)

        {

            root = new node();

            cout<<"Enter Root Data: ";

            cin>>root->data;

            root->right = NULL;

            root->left = NULL;

        }

        else

        {

            temp = root;

            cout<<"Data: ";

            cin>>value;

            while(true)

            {

                if(value < temp->data)

                {

                    if (temp->left == NULL)

                    {

                        temp->left = new node();

                        temp = temp->left;

                        temp->data = value;

                        temp->left = NULL;

                        temp->right = NULL;

                        cout<<"value entered in left side
";

                        break;

                    }

                    else if (temp->left != NULL)

                    {

                        temp = temp->left;

                    }

                }

                else if (value >=temp->data)

                {

                    if (temp->right == NULL)

                    {

                        temp->right = new node();

                        temp = temp->right;

                        temp->data = value;

                        temp->left = NULL;

                        temp->right = NULL;

                        cout<<"value entered in right side
";

                        break;

                    }

                    else if(temp->right != NULL)

                    {

                        temp = temp->right;

                    }

                }

            }

        }

        i++;

    }

}

void push(tree *ptr)

{

    new_ptr = new NODE;

    new_ptr->p = ptr;

    new_ptr->next = NULL;

    if (top == NULL)

    {

        top = new_ptr;

    }

    else

    {

        q = top;

        top = new_ptr;

        new_ptr->next = q;

    }

}

tree *pop()

{

    if (top == NULL)

    {

        cout<<"underflow
";

    }

    else

    {

        q = top;

        top = top->next;

        return(q->p);

        delete(q);

    }

}

void traverse(tree *ptr)

{

    int flag=1;

    push(ptr);

    while (top != NULL)

    {

        while (ptr != NULL)

        {

            push(ptr);

            ptr =ptr->left;

        }

        if (top != NULL && ptr == NULL)

        {

            ptr = pop();

            if(flag!=1)

            {

            cout<<ptr->data<<" ";

            }

            flag++;

            ptr = ptr->right;

        }

    }

}

int main()

{

    create();

    cout<<"Print Inorder : ";

    traverse(root);

    cout<<endl;

}

Output

Enter Total Node Node Number: 5
Enter Root Data: 1
Data: 4
value entered in right side
Data: 5
value entered in right side
Data: 1
value entered in left side
Data: 7
value entered in right side
Print Inorder : 1 4 5 7 1

Join the discussion

Add your comment