#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;
}