c++ Посчитать количество элементов в левой половине двоичного дерева

Необходимо подсчитать количество элементов, находящихся в левой половине двоичного дерева. Помогите пожалуйста составить для этого функцию tree_count() внутри структуры Tree. Скорее всего тут не обойтись без рекурсии. Код:

#include <iostream>
using namespace std;

struct Node
{
    int data;
    Node* left, * right;
    Node(int N)
    {
        data = N;
        left = right = 0;
    }
    void print()
    {
        cout << data << ' ';
    }
};
struct Tree
{
    Node* root;
    Tree() : root(0) {}
    void insert(int N)
    {
        Node* newNode = new Node(N);
        if (!root)
        {
            root = newNode;
            return;
        }
        Node* current = root;
        Node* parent;
        while (true)
        {
            parent = current;
            if (N < current->data)
            {
                current = current->left;
                if (!current)
                {
                    parent->left = newNode;
                    return;
                }
            }
            else
            {
                current = current->right;
                if (!current)
                {
                    parent->right = newNode;
                    return;
                }
            }
        }
    }
    bool find(int N)
    {
        Node* current = root;
        while (current != 0)
        {
            if (N == current->data)return true;
            current = N < current->data ? current->left : current->right;
        }
        return false;
    }
    void recprint(Node* n)
    {
        if (!n)return;
        recprint(n->left);
        n->print();
        recprint(n->right);
    }
    void print()
    {
        recprint(root);
        cout << endl;
    }
    Node* getSuccessor(Node* del)
    {
        Node* successor = del, * parent = del, * current = del->right;
        while (current != 0)
        {
            parent = successor;
            successor = current;
            current = current->left;
        }
        if (successor != del->right)
        {
            parent->left = successor->right;
            successor->right = del->right;
        }
        return successor;
    }
    bool erase(int N)
    {
        Node* current = root;
        Node* parent = root;
        bool isLeft;
        while (current->data != N)
        {
            parent = current;
            if (N < current->data)
            {
                current = current->left;
                isLeft = true;
            }
            else
            {
                current = current->right;
                isLeft = false;
            }
            if (!current)return false;
        }
        if (!current->left && !current->right)
        {
            if (current == root)root = 0;
            else if (isLeft)parent->left = 0;
            else parent->right = 0;
        }
        else if (!current->right)
        {
            if (current == root)root = current->left;
            else if (isLeft)parent->left = current->left;
            else parent->right = current->left;
        }
        else if (!current->left)
        {
            if (current == root)root = current->right;
            else if (isLeft)parent->left = current->right;
            else parent->right = current->right;
        }
        else
        {
            Node* successor = getSuccessor(current);
            if (current == root)root = successor;
            else if (isLeft)parent->left = successor;
            else parent->right = successor;
            successor->left = current->left;
        }
        delete current;
        return true;
    }
    bool isEmpty()
    {
        return !root;
    }

    int tree_count() {}

};




void main()
{
    int a;
    Tree t;
    for (int i = 0; i < 9; i++)t.insert(rand() % 33);
    t.print();
    a = t.tree_count(t.root);
    cout << a;


}

Ответы (0 шт):