#include <iostream>
#include <conio.h>
using namespace std;

struct node
{
    int num;
    node *lLink;
    node *rLink;
};
void createNode(node *&root);
void connectNode(node *newNode,node *current);
void preOrder(node *current);
void menu(int& choice);

main()
{
    int choice;
    int num;
    node *root;            
    node *parent;          
    node *current;
    node *sNode;
    node *temp;            
    root = NULL;
    do
    {
        menu(choice);
        switch(choice)
        {
            case 1:
                createNode(root);
                getch();
                break;
            case 2:
                cout<<"Pre-order Traversal"<<endl<<endl;
                preOrder(root);
                getch();
                break;
        }
       
    }while(choice!=24);
}
void menu(int& choice)
{
    system("cls");
    cout<<"[1] Add New Node"<<endl
        <<"[2] Display"<<endl;
     cout<<"Enter your choice:";
    cin>>choice;
}
void createNode(node* &root)
{
    node *newNode;
    int num;
   
    newNode=new node;
    newNode->lLink=NULL;
    newNode->rLink=NULL;
    cout<<"Enter number:";
    cin>>num;
    newNode->num=num;
   
    if(root==NULL){root=newNode;cout<<"root";}
    else connectNode(newNode,root);
}
void connectNode(node *newNode,node *current)
{
    if(newNode->num > current->num)
    {
        if(current->rLink!=NULL)
        {
            cout<<"Move to the right of "<<current->num<<endl;
            connectNode(newNode,current->rLink);
        }
        else
        {
            current->rLink=newNode;
            cout<<newNode->num<<" is connected to the right of "<<current->num<<endl;
        }
    }
    else
    {
        if(current->lLink!=NULL)
        {
            cout<<"Move to the left of "<<current->num<<endl;
            connectNode(newNode,current->lLink);
        }   
        else
        {
            current->lLink=newNode;
            cout<<newNode->num<<" is connected to the left of "<<current->num<<endl;
        }   
    }
}
void preOrder(node* current)
{
    if(current->lLink!=NULL)
        cout<<current->num<<" has a left child of "<<current->lLink->num<<endl;
    else cout<<current->num<<" has no left child."<<endl;
   
    if(current->rLink!=NULL)
        cout<<current->num<<" has a right child of "<<current->rLink->num<<endl;
    else cout<<current->num<<" has no right child."<<endl;
    //cout<<current->num <<" ";
   
   
    if(current->lLink!=NULL)preOrder(current->lLink);
    if(current->rLink!=NULL)preOrder(current->rLink);
}