Загрузка данных


#include <iostream>
using namespace std;

// Структура узла дерева
struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};

// Функция подсчёта количества узлов в дереве (начиная с node)
int countNodes(TreeNode* node) {
    if (node == nullptr) return 0;
    return 1 + countNodes(node->left) + countNodes(node->right);
}

// Функция для подсчёта количества узлов в левой ветви (левом поддереве)
int countLeftBranch(TreeNode* root) {
    if (root == nullptr) return 0;
    return countNodes(root->left);
}

// Функция для печати дерева (прямой обход) — для проверки
void preorder(TreeNode* root) {
    if (root == nullptr) return;
    cout << root->val << " ";
    preorder(root->left);
    preorder(root->right);
}

// Пример использования
int main() {
    // Создадим сбалансированное дерево с числами от –50 до 50
    // Для примера построим простое дерево:
    //         0
    //       /   \
    //     -10    10
    //     / \   / \
    //   -20 -5 5  20
    TreeNode* root = new TreeNode(0);
    root->left = new TreeNode(-10);
    root->right = new TreeNode(10);
    root->left->left = new TreeNode(-20);
    root->left->right = new TreeNode(-5);
    root->right->left = new TreeNode(5);
    root->right->right = new TreeNode(20);

    cout << "Дерево (прямой обход): ";
    preorder(root);
    cout << endl;

    int leftCount = countLeftBranch(root);
    cout << "Количество узлов в левой ветви: " << leftCount << endl;

    // Освобождение памяти (для простоты примера опущено)

    return 0;
}