summaryrefslogtreecommitdiff
path: root/bin-trees/task17.cpp
diff options
context:
space:
mode:
authorAndrew <saintruler@gmail.com>2021-03-18 18:36:33 +0400
committerAndrew <saintruler@gmail.com>2021-03-18 18:36:33 +0400
commit14447430a5fae172e0eeff0fd0a484a0fd65e193 (patch)
tree4e55fa3d538b549c1d8c50f9fcf0b055a5602f48 /bin-trees/task17.cpp
parentd1b2a66f3246ff6b2d1f22a7b3757345ef429346 (diff)
Добавил 17 задачу из деревьев
Diffstat (limited to 'bin-trees/task17.cpp')
-rw-r--r--bin-trees/task17.cpp53
1 files changed, 53 insertions, 0 deletions
diff --git a/bin-trees/task17.cpp b/bin-trees/task17.cpp
new file mode 100644
index 0000000..cc917a9
--- /dev/null
+++ b/bin-trees/task17.cpp
@@ -0,0 +1,53 @@
+#include <iostream>
+#include <string>
+
+#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)
+{
+ if (n > 0)
+ {
+ int x;
+ cin >> x;
+ t = node(x);
+
+ // Дерево строится справа налево, чтобы ситуация из задания могла
+ // случиться (иначе, ответ всегда будет 0)
+ int nr = n / 2;
+ int nl = n - nr - 1;
+
+ create(t->right, nr);
+ create(t->left, nl);
+ }
+}
+
+int main()
+{
+ int n;
+ cin >> n;
+ tree *t = new tree;
+ create(t, n);
+
+ // Ответ всегда 0 или 1
+ int x = solve(t);
+ cout << x << endl;
+ return 0;
+}