Найти максимальный элемент бинарного дерева и количество повторений максимального элемента в данном дереве
Здравствуйте. Дано задание : Найти максимальный элемент бинарного дерева и количество повторений максимального элемента в данном дереве.
Максимальное значение находит, количество повторений не могу придумать как сделать
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; }
Источник