Максимальное значение бинарного дерева

Найти максимальный элемент бинарного дерева и количество повторений максимального элемента в данном дереве

Здравствуйте. Дано задание : Найти максимальный элемент бинарного дерева и количество повторений максимального элемента в данном дереве.

Максимальное значение находит, количество повторений не могу придумать как сделать

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
#include using namespace std; struct node { node* left; node* right; int val; node(int v) :left(NULL), right(NULL), val(v) {} }; const node* node_max(const node* tr); void node_add(node*& tr, int val); void node_clear(node* tr); int main(void) { node* tr = NULL; int a[] = { 3, 16, 8, -3, 5, -34, 4 }; cout  "Ishodnye danie dereva"  endl; for (int i = 0; i  7; i++) { cout  a[i]  endl; } for (unsigned i = 0; i  sizeof(a) / sizeof(a[0]); ++i) node_add(tr, a[i]); const node* pmax = node_max(tr); if (pmax != NULL) cout  "max: "  pmax->val  endl; node_clear(tr); cin.get(); return 0; } const node* node_max(const node* tr) { if (tr == NULL) return NULL; const node* p = tr; while (p->right != NULL) p = p->right; return p; } void node_add(node*& tr, int val) { node** p = &tr; node* i = tr; while (i != NULL) { if (val  i->val) { p = &i->left; i = i->left; } else if (val > i->val) { p = &i->right; i = i->right; } else return; } *p = new node(val); } void node_clear(node* tr) { if (tr != NULL) { if (tr->left != NULL) node_clear(tr->left); if (tr->right != NULL) node_clear(tr->right); delete tr; } }

Источник

Найти в бинарном дереве максимальный элемент и количество его повторений

Найти максимальный элемент бинарного дерева и количество повторений максимального элемента в данном дереве.

Найти максимальный элемент бинарного дерева и количество повторений максимального элемента в данном дереве
Здравствуйте. Дано задание : Найти максимальный элемент бинарного дерева и количество повторений.

Найти максимальный элемент в бинарном дереве
тип информационного поля int*, найти маскимальный элемент в дереве. (помогите, пожалуйста, нужен.

Найти максимальный и минимальный элементы в заданном бинарном дереве
Максимальный и минимальный элементы бинарного дерева Разработайте подпрограммы, которые находят.

Как найти количество ветвей в бинарном дереве
Имеется глубина бинарного дерева. Под глубиной подразумевается количество узлов в самом длинном.

Лучший ответ

Сообщение было отмечено ArtWhite как решение

Решение

ArtWhite, здравствуйте! Например, так:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
/* Найти максимальный элемент бинарного дерева и количество повторений максимального элемента в данном дереве. */ #include #include using namespace std; struct BTree { int data; BTree* left; BTree* right; }; BTree* add(int data) { BTree* node = new BTree; node->data = data; node->left = NULL; node->right = NULL; return node; } BTree* insert(BTree * node, int key) { if (node == NULL) return add(key); if (key  node->data) node->left = insert(node->left, key); else if (key >= node->data) node->right = insert(node->right, key); return node; } int find_max(BTree* node) { if (node == NULL) { return 0; } int max_l = max(find_max(node->left), node->data); int max_r = max(find_max(node->right), node->data); return max(max_l, max_r); } int find_occur(BTree* node, int key) { if (node == NULL) return 0; if (key  node->data) { return find_occur(node->left, key); } else if (key > node->data) { return find_occur(node->right, key); } else { return 1 + find_occur(node->right, key); } } int main() { int n, val; BTree* root = NULL; cout  <"Enter a number of nodes:\n"; cout  <"n = "; cin >> n; cout  <"Enter binary tree nodes:\n"; for (int i = 0; i  n; i++) { cout  + 1  <" => "; cin >> val; if (i == 0) { root = insert(root, val); } else { insert(root, val); } } cout  <"Output of the program:\n"; cout  <"Found maximum: "  (root)  <"\n"; cout  <"The maximum occurs: "  (root, find_max(root))  <" times!\n"; system("pause"); return 0; }

Источник

Читайте также:  Восстановительные технологии для дерева
Оцените статью