From 14447430a5fae172e0eeff0fd0a484a0fd65e193 Mon Sep 17 00:00:00 2001 From: Andrew Date: Thu, 18 Mar 2021 18:36:33 +0400 Subject: =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=2017=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D1=87=D1=83=20=D0=B8=D0=B7=20=D0=B4?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D0=B2=D1=8C=D0=B5=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin-trees/task17.cpp | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++ bin-trees/tree.h | 19 +++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 bin-trees/task17.cpp create mode 100644 bin-trees/tree.h 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 +#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) +{ + 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; +} diff --git a/bin-trees/tree.h b/bin-trees/tree.h new file mode 100644 index 0000000..0fa61b1 --- /dev/null +++ b/bin-trees/tree.h @@ -0,0 +1,19 @@ +#pragma once + +struct tree +{ + int inf; + tree *left; + tree *right; + tree *parent; +}; + +tree *node(int x) +{ + tree *n = new tree; + n->inf = x; + n->parent = NULL; + n->right = NULL; + n->left = NULL; + return n; +} -- cgit v1.2.3