Вывести самую длинную ветвь в бинарном дереве
По условию своей задачи сделал всё кроме последнего пункта: вывести самую длинную ветвь в бинарном дереве(именно все элементы этой ветки)..
На сайте ничего не нашёл, да и вообще в интернете.
Вот мой код, не могу придумать функцию которая выводит самую длинную ветку.
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 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
#include "stdafx.h" #include #include #include #include using namespace std; int tabs = 0; struct Node { int Data; Node *LeftBranch; Node *RightBranch; }; void Add(int data, Node *&aNode) { if (!aNode) { aNode = new Node; aNode->Data = data; aNode->LeftBranch = 0; aNode->RightBranch = 0; return; } else if (aNode->Data>data) { Add(data, aNode->LeftBranch); } else { Add(data, aNode->RightBranch); }; } void print(Node *aNode) { if (!aNode) return; tabs++; print(aNode->LeftBranch); for (int i = 0; itabs; i++) cout <" "; cout- >Data; print(aNode->RightBranch); tabs--; return; } void freeTree(Node *aNode) { if (!aNode) return; freeTree(aNode->LeftBranch); freeTree(aNode->RightBranch); delete aNode; return; } void checkForInt(string b) { int lineLength = b.length(); for (int i = 0; i lineLength; i++) { if (!isdigit(b[i])) { cout <"Ошибка."; system("pause>>void"); exit(1); } } } int getMaxDepth(Node* tree, int depth) { if (tree == NULL) { return depth; } return max(getMaxDepth(tree->LeftBranch, depth + 1), getMaxDepth(tree->RightBranch, depth + 1)); } int main() { setlocale(LC_ALL, "Russian"); srand(time(0)); int depth=0; Node *Root = 0; cout <"Введите длину строки: "; string n; cin >> n; checkForInt(n); int nInt = stoi(n); cout <"Кол-во элементов дерева: "int **intArray = new int*[2]; for (int count = 0; count 2; count++) intArray[count] = new int[nInt]; for (int i = 0; i 2; ++i) { for (int j=0;jnInt;++j){ intArray[i][j] = rand() % 9+1; cout ; [ i][j] <" "; } cout; } for (int i = 0; i2; ++i) { for (int j = 0; j nInt; ++j) { Add(intArray[i][j], Root); } } print(Root); cout <"Длина самой длинной ветки: "( Root, depth); freeTree(Root); for (int count = 0; count 2; count++) delete[]intArray[count]; system("pause>>void"); return 0; }
Источник
Нужно вывести на экран содержимое самой длинной ветки бинарного дерева
Вывести элементы самой длинной ветви бинарного дерева
вот есть реализация дерева: #include <stdio.h> #include <stdlib.h> #include <alloc.h> /*.
Сумма элементов самой длинной ветки
Доброго времени суток, господа. Прошу вас,пожалуйста, подкорректировать код, представленный ниже.
Вывод левой ветки бинарного дерева
Здравствуйте, уважаемые форумчане! Вывел левую ветку бинарного дерева на экран, но хотел.
Сообщение было отмечено как решение
Решение
Добавлено через 1 час 22 минуты
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
#include #include #include #include struct DER { int data; struct DER *l, *r; }; typedef struct DER *TREE; TREE BuildTree(int n) { TREE pt_tree; int new_el, nl, nr; if (n==0) { pt_tree = NULL; return pt_tree; } nl = n/2; nr=n-nl-1; scanf("%d\n", &new_el); pt_tree = (TREE)calloc(1,sizeof(struct DER)); pt_tree->data = new_el; pt_tree->l = BuildTree(nl); pt_tree->r = BuildTree(nr); return pt_tree; } void PrintTree(TREE pt_tree) { int i; if(pt_tree != NULL) { PrintTree(pt_tree -> l); printf("%d\n",pt_tree -> data); PrintTree(pt_tree -> r); } } int main() { TREE tree; int tree_el, i; tree = NULL; tree=BuildTree(7); PrintTree(tree); 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 91 92 93 94 95 96 97
#include #include using namespace std; struct point { int data; //информационное поле point *left; //адрес левого поддерева point *right; //адрес правого поддерева }; point* Tree(int x, point *p) { if(!p) { p=new point; p->left=NULL; p->right=NULL; p->data=x; } else { if(p->data>x) {p->left=Tree(x, p->left);} else {p->right=Tree(x, p->right);} } return p; } void Print(point *p, int l) { if(p) { Print(p->left,l+5); for(int i=0;il;i++) cout<" "; cout-
>data; Print(p->right,l+5); } } int maxim(int *mas, int *i) { int n, min, t; min=mas[0]; for(n=0;n*i;n++) if(mas[n]>min) { min=mas[n]; t=n; } return t; } int getlen(point* p, int level, int *k, int *mas, int *mas2, int *i) { if (p->left) { getlen(p->left, level + 1, k, mas, mas2, i); } if (p->right) { getlen(p->right, level + 1, k, mas, mas2, i); } if ((!p->left) & (!p->right)) { mas[*i]=p->data; mas2[*i]=level; (*i)++; } return mas[*i]; } void main() { SetConsoleOutputCP(1251); SetConsoleCP(1251); const int t=5; int n,i=0, k, s, x, f; int mas[t], mas2[t]; cout<"Задайте количество элементов дерева\n"; cin>>n; point *root=NULL; for(i=0;in;i++) { cout<"элемент:"; cin>>x; root=Tree(x, root); } i=0; Print(root,0); s=getlen(root, 1, &k, mas, mas2, &i); cout<"Элемент самой длинной ветки дерева: "[ maxim(mas2, &i)]; }
Вывести на экран длину самой длинной последовательности, расположенной между двумя нулями
С клавиатуры вводится последовательность чисел, пока не будет введено отрицательное число( это.
Функция удаления листа (или ветки) бинарного дерева
Здравствуйте программисты! Учусь на первом курсе. Возникли проблемы с разработкой функции удаления.
Как сравнить между собой ветки бинарного дерева?
Ребят, как сравнить между собой ветки бинарного дерева, точнее сравнить правую ветку с левой и так.
Как вывести содержимое бинарного файла на экран?
Как в программе оформить вывод содержимого бинарного файла на экран? #include <clocale> #include.
Источник
Великий баньян: фото необычного леса состоящего всего из одного дерева
Рядом с индийским городом Калькутта находится Великий баньян. Это поистине волшебное дерево привлекает больше туристов, чем любые другие растения, растущие на пяти континентах. Оно — король ботанического сада!
Попадая сюда, кажется, что вы находитесь в густом лесу с большим количеством отдельно стоящих деревьев, однако это не так. О Великом баньяне, который смело претендует на звание одного из чудес света, расскажет Joinfo.com.
Великий баньян: фото необычного дерева
То, что сейчас называется «Великим баньяновым деревом», на самом деле представляет собой сеть взаимосвязанных и крупных побегов, которые занимают огромную площадь и постоянно разрастаются. От дерева-родителя отходят сотни воздушных корней. Это специальные отростки, которые образуются на стволе и ветках. Достигнув уровня почвы, воздушные корни прорастают и служат дереву дополнительным источником влаги и питания.
Все стволы, которые вы видите на фото, неразрывно связаны друг с другом. Это означает, что все эти растения можно смело назвать одним деревом и единым организмом. Великий баньян относится к виду «Ficus benghalensis», который естественно растет в Индии и дает несъедобные плоды, похожие на маленькие красные фиги.
Этому дереву более четверти тысячелетия. Кто его посадил, никто не знает. Великий баньян пережил два мощных циклона, несколько сильных землетрясений и десятки тысяч ударов молнии. В настоящее время дерево занимает площадь в полтора гектара, а его самые длинные ветви достигают почти 25 метров.
Посмотреть, как выглядит это чудо природы, вы можете, заглянув в нашу фотогалерею. Добро пожаловать и приятного просмотра!
Предлагаем также взглянуть на топ-10 самых красивых и известных ботанических садов в мире. Среди них есть и индийский – место обитания героя нашей сегодняшней публикации.
Источник