BinaryTree

#include <cstdio>

class BinaryTree
{
    int *left,*right,V,root;

    void preOrderTraversal(int u)
    {
        printf("%d\n",u);
        if(left[u]!=-1) preOrderTraversal(left[u]);
        if(right[u]!=-1) preOrderTraversal(right[u]);
    }

    void postOrderTraversal(int u)
    {
        if(left[u]!=-1) postOrderTraversal(left[u]);
        if(right[u]!=-1) postOrderTraversal(right[u]);
        printf("%d\n",u);
    }

    void inOrderTraversal(int u)
    {
        if(left[u]!=-1) inOrderTraversal(left[u]);
        printf("%d\n",u);
        if(right[u]!=-1) inOrderTraversal(right[u]);
    }

public:
    void printPreOrder()    {if(root!=-1) preOrderTraversal(root);}
    void printPostOrder()   {if(root!=-1) postOrderTraversal(root);}
    void printInOrder()     {if(root!=-1) inOrderTraversal(root);}

    BinaryTree(int V_=100)
    {
        left=new int[V_+3];
        right=new int[V_+3];

        for(int i=0;i<=V_;i++) left[i]=right[i]=-1;
        root=-1, V=0;
    }

    bool isAvailable(int v)
    {
        int u=root;

        while(u!=-1)
        {
            if(v<u) u=left[u];
            else if(v>u) u=right[u];
            else return true;
        }

        return false;
    }

    bool addVertex(int v)   //returns true if added, false if already available
    {
        int u=root;

        while(u!=-1)
        {
            if(v<u)
            {
                if(left[u]!=-1) u=left[u];
                else left[u]=v, u=-1;
            }
            else if(v>u)
            {
                if(right[u]!=-1) u=right[u];
                else right[u]=v, u=-1;
            }
            else return false;
        }

        if(u==root) root=v;
        V++;

        return true;
    }
};

int main()
{
    /* code */
    return 0;
}