#include #include #include "tree.h" using namespace std; int solve(tree *&t) { int count = 0; if (t->left == NULL && t->right != NULL) count++; if (t->left != NULL) count += solve(t->left); if (t->right != NULL) count += solve(t->right); return count; } void create(tree *&t, int n, tree *parent) { if (n > 0) { int x; cin >> x; t = node(x); t->parent = parent; // Дерево строится справа налево, чтобы ситуация из задания могла // случиться хотя бы один раз (иначе, при создании дерева с помощью // этого алгоритма ответ всегда будет 0) int nr = n / 2; int nl = n - nr - 1; create(t->right, nr, t); create(t->left, nl, t); } } int main() { int n; cout << "Введите количество узлов: "; cin >> n; tree *t = new tree; cout << "Введите содержимое узлов:" << endl; create(t, n, NULL); print(t, log(n) / log(2)); int x = solve(t); cout << "Количество узлов, имеющих только правого потомка: " << x << endl; return 0; }