summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew <saintruler@gmail.com>2021-03-18 20:14:35 +0400
committerAndrew <saintruler@gmail.com>2021-03-18 20:14:35 +0400
commit84a9b5950b63ab1f664ff3bfce8da126439c7963 (patch)
treebdd5fa418c687551af96057c7df24274a13c1fe1
parentf825070a18f1f007b55cbc92f5ee0325d0b5cf28 (diff)
Исправил 17 задачу
-rw-r--r--bin-trees/task17.cpp20
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;
}