diff options
| author | Andrew <saintruler@gmail.com> | 2021-03-18 20:14:35 +0400 |
|---|---|---|
| committer | Andrew <saintruler@gmail.com> | 2021-03-18 20:14:35 +0400 |
| commit | 84a9b5950b63ab1f664ff3bfce8da126439c7963 (patch) | |
| tree | bdd5fa418c687551af96057c7df24274a13c1fe1 | |
| parent | f825070a18f1f007b55cbc92f5ee0325d0b5cf28 (diff) | |
Исправил 17 задачу
| -rw-r--r-- | bin-trees/task17.cpp | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/bin-trees/task17.cpp b/bin-trees/task17.cpp index cc917a9..d2cf414 100644 --- a/bin-trees/task17.cpp +++ b/bin-trees/task17.cpp @@ -20,34 +20,38 @@ int solve(tree *&t) return count; } - -void create(tree *&t, int n) +void create(tree *&t, int n, tree *parent) { if (n > 0) { int x; cin >> x; t = node(x); + t->parent = parent; // Дерево строится справа налево, чтобы ситуация из задания могла - // случиться (иначе, ответ всегда будет 0) + // случиться хотя бы один раз (иначе, при создании дерева с помощью + // этого алгоритма ответ всегда будет 0) int nr = n / 2; int nl = n - nr - 1; - create(t->right, nr); - create(t->left, nl); + create(t->right, nr, t); + create(t->left, nl, t); } } int main() { int n; + cout << "Введите количество узлов: "; cin >> n; tree *t = new tree; - create(t, n); + cout << "Введите содержимое узлов:" << endl; + create(t, n, NULL); + + print(t, log(n) / log(2)); - // Ответ всегда 0 или 1 int x = solve(t); - cout << x << endl; + cout << "Количество узлов, имеющих только правого потомка: " << x << endl; return 0; } |