Найти максимальный элемент дерева
Здравствуйте. Помогите, пожалуйста, найти максимальный элемент в данной программе. Тут выводится несколько «узлов», т.е. дерево с помощью структуры и рекурсивной функции. Заранее спасибо.
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
#include #include struct treenode { int val; treenode* left; treenode* right; treenode(int a_val, treenode* a_left, treenode* a_right):val(a_val), left(a_left), right(a_right) { } }; void print(treenode* node, int node_count) { if (node != nullptr) { int counter = 0; while (counter node_count) { putchar(' '); counter++; } printf("%d\n", (*node).val); print((*node).left, node_count + 1); print((*node).right, node_count + 1); } } int main() { treenode* root = new treenode(2, new treenode(3, new treenode(10, new treenode(9, nullptr, nullptr), nullptr), new treenode(7, nullptr, nullptr)), new treenode(4, new treenode(8, nullptr, nullptr), new treenode(7, nullptr, nullptr))); print(root, 0); getchar(); }
Источник
Найти максимальный элемент бинарного дерева и количество повторений максимального элемента в данном дереве
Здравствуйте. Дано задание : Найти максимальный элемент бинарного дерева и количество повторений максимального элемента в данном дереве.
Максимальное значение находит, количество повторений не могу придумать как сделать
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; }
Источник
Найти максимальный элемент в бинарном дереве
Найти максимальный элемент в двоичном дереве
Помогите решить задачку:найти максимальный элемент в двоичном дереве. Шаблон уже есть ,мне нужно.
В заданном бинарном дереве найти первое вхождение заданного элемента
в заданном бинарном дереве найти первое вхождение заданного элемента и напечатать пройденные при.
В бинарном дереве найти длину (число ветвей) пути от корня до ближайшей вершины
В заданном непустом бинарном дереве найти длину (число ветвей) пути от корня до ближайшей вершины.
Найти в бинарном дереве максимальный элемент и количество его повторений
Найти максимальный элемент бинарного дерева и количество повторений максимального элемента в данном.
Сообщение было отмечено Памирыч как решение
Решение
Вот код. Дерево из трех-четырех узлов неупорядоченно (не дерево поиска). Использована рекурсивная процедура обхода дерева, которая ищет минимум. Кстати, точно такая же процедура (по сути) удаляет дерево.
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 77 78 79 80 81 82 83 84 85 86 87 88 89 90
#include struct Node { int Val; Node *Left; Node *Right; }; void delTree(Node *root) { if ((root->Left == NULL) && (root->Right == NULL)) delete root; else if (root->Left == NULL) { delete root->Left; delete root; } else if (root->Right == NULL) { delete root->Right; delete root; } else { delete root->Right; delete root->Left; delete root; } } int min (int a, int b) { return ((a > b) ? b : a); } int minVal(Node *root) { if ((root->Left == NULL) && (root->Right == NULL)) return root->Val; else if (root->Left == NULL) return min(root->Val,minVal(root->Right)); else if (root->Right == NULL) return min(root->Val,minVal(root->Left)); else return min(root->Val,min(minVal(root->Left),minVal(root->Right))); } int main(int argc, char* argv[]) { Node *Root,*Curr,*Next; Root = new Node; Root->Left =NULL; Root->Right =NULL; Root->Val=123; Curr = new Node; Curr->Left =NULL; Curr->Right =NULL; Curr->Val=56; Root->Left=Curr; Curr = new Node; Curr->Left =NULL; Curr->Right =NULL; Curr->Val=66; Root->Right=Curr; Next = new Node; Next->Left =NULL; Next->Right =NULL; Next->Val=16; Curr->Right=Next; cout minVal(Root) endl; delTree(Root); return 0; }
Источник