Witam mam takie drzewo :

#include <cstdio>
 
class Node
{
public:
        Node *left, *right, *parent;
        int key;
        Node(int key) : left(NULL), right(NULL), key(key)
        { }
};
 
void insert(Node *N, int key)
{
        if(N->key == key)
                return;
        if(N->key < key)
                if(N->right)
                        insert(N->right, key);
                else
                        N->right = new Node(key);
        else
                if(N->left)
                        insert(N->left, key);
                else
                        N->left = new Node(key);
}
 
Node* search(Node *N, int key)
{
        if(N == NULL)
                return NULL;
        if(N->key == key)
                return N;
        if(N->key < key)
                return search(N->right, key);
        return search(N->left, key);
}
 
int main()
{
        char cmd;
        int key;
        Node *root = NULL, *out;
 
        while(scanf("%c %d\n", &cmd, &key) > 0)
        {
                if(cmd == 'I')
                        if(root)
                                insert(root, key);
                        else
                                root = new Node(key);
                else if(cmd == 'S')
                        out = search(root, key);
                // tu należy dopisać pozostałe funkcje
        }
        return 0;
} 

Dalej mam wykonać takie polecenia:
Na wyjściu mają się pojawić rezultaty wczytywanych z wejścia poleceń:
I n - wstaw n do drzewa lub nie rób nic, jeśli ten wyraz już jest w drzewie; nic nie drukuj; (już zrobione)
R n - wypisz rozmiar poddrzewa ukorzenionego w n lub "-" jeśli wierzchołek nie istnieje

Mógłby ktoś pomóc?