Малко по различна задача, създаване на двоично дърво. Прилагам код за първа подточка т.e. по-голямата част от задачата. Благодаря предварително!

//1)-Да се състави двоично дърво, на което потребител да въвежда елементи,  да се отпечатват тези елементи, да има опция за изтриване на  избран елемент от потребителя и функция, която търси елементи. 

-Обхождането на елементите съм го направил във вътрешен ред или (симитрично обхождане). Не е прав ред или обратен ред.

//2)-Създайте фухкция за обединяване на две дадени двоични дървета за търсене в ново подредено двоично дърво .

 

#include <iostream>
using namespace std;

struct elem
{
    elem* pleft, * pright;
    int key;
}*root = NULL;
int menu();
void add(int n, elem*& t);
void inorder(elem* t);
int del(int k);
elem*& search(int k);
int height(elem* t);
void printNode(int n, int h);
void show(elem* t, int h);
 
void main()
{
    int n = 0, num, h;
    do
    {
        n = menu();
        switch (n)
        {
        case 1:
        {
            cout << "Num= ";
            cin >> num;
            add(num, root);
            break;
        }
        case 2:
        {
            cout << "All elements: ";
            inorder(root);
            break;
        }
        case 3:
        {
            cout << "Search: ";
            cin >> num;
            elem*& p = search(num);
            if (p == NULL)
            {
                cout << "The item is not in the tree: " << endl;
            }
            else
            {
                cout << "The item is in the tree: " << endl;
            }
            break;
        }
        case 4:
        {
            cout << "Enter the item to be delete: ";
            cin >> num;
            if (del(num) == 0)
                cout << "The item is not the tree: " << endl;
            break;
        }
        case 5:
        {
            h = height(root);
            show(root, h);
            cout << endl;

        }
        }
    } while (n != 6);
}
int menu()
{
    int izbor = 0;
    do
    {
        cout << endl << "MENU " << endl;
        cout << "1)-Add element: " << endl;
        cout << "2)-Print: " << endl;
        cout << "3)-Search: " << endl;
        cout << "4)-Delete: " << endl;
        cout << "5)-Show: " << endl;
        cout << "6)-End: " << endl;
        cout << ">> ";
        cin >> izbor;
    } while (izbor < 1 || izbor > 6);
    return izbor;
}
void add(int n, elem*& t)
{
    if (t == NULL)
    {
        t = new elem;
        t->key = n;
        t->pleft = t->pright = NULL;
    }
    else
    {
        if (t->key < n)
            add(n, t->pright);
        else
            add(n, t->pleft);
    }
}
void inorder(elem* t)
{
    if (t)
    {
        inorder(t->pleft);
        cout << t->key << " ";
        inorder(t -> pright);
    }
}
elem*& search(int k)
{
    elem** p = &root;
    for (;;)
    {
        if (*p == NULL)
            return *p;
        if (k < (*p)->key)
            p = &(*p)->pleft;
        else
            if (k > (*p)->key)
                p = &(*p)->pright;
            else
                return *p;
    }
}
int del(int k)
{
    elem*& p = search(k), * p0 = p, ** qq, * q;
    if (p == NULL)
        return 0;
    if (p->pright == NULL)
    {
        p = p->pleft;
        delete p0;
    }
    else
        if (p->pleft == NULL)
        {
            p = p->pright;
            delete p0;
        }
        else
        {
            qq = &p->pleft;
            while ((*qq)->pright)
                qq = &(*qq)->pright;
            p->key = (*qq)->key;
            q = *qq;
            *qq = q->pleft;
            delete q;
        }
    return 1;
}
int height(elem* t)
{
    int u, v;
    if (!t)
        return -1;
    u = height(t->pleft);
    v = height(t->pright);
    if (u > v)
        return u + 1;
    else
        return v + 1;
}
void printNode(int n, int h)
{
    for (int i = 0; i < h; i++)
    {
        cout << "\t";
    }
    cout << n << endl;
}
void show(elem* t, int h)
{
    if (t)
    {
        show(t->pright, h + 1);
        printNode(t->key, h);
        show(t->pleft, h + 1);
    }
}