Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/34: Рейтинг темы: голосов - 34, средняя оценка - 4.65
5 / 0 / 0
Регистрация: 26.04.2011
Сообщений: 18
1

Задача про Бинарные деревья!

06.12.2011, 17:59. Показов 6835. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
здрасти! помогите плиз с задачей! я вот начал писать и столкнулся с проблемами...
вот задание:

Записи вершин дерева - вещественные числа. Описать процедуру или функцию, которая:
находит максимальное или минимальное значение записей вершин непустого дерева;

C++
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
#include <iostream>
 
using namespace std;
 
struct tree 
{
  int info;
  tree *left;
  tree *right;
};
 
struct tree *root1; 
 
struct tree *stree(struct tree *root, struct tree *r, int info)
{
 
  if(!r) 
  {
    r = (struct tree *) malloc(sizeof(struct tree));
    r->left = NULL;
    r->right = NULL;
    r->info = info;
    if(!root) return r; /* первый вход */
    if(info < root->info) root->left = r;
    else root->right = r;
    return r;
  }
 
  if(info < r->info)
    stree(r, r->left, info);
  else
    stree(r, r->right, info);
 
  return root;
}
 
void print_tree(struct tree *r, int l)
{
  int i;
 
  if(!r) return;
 
  print_tree(r->right, l+1);
  for(i=0; i<l; ++i) cout<<"   ";
  cout<<r->info;
  cout<<endl;
  print_tree(r->left, l+1);
}
void searchMax(struct tree *r, int l,int m)
{
cout<<m<<endl;
if(!r) return;
 
 
  if(m<r->info) 
 m=r->info;
 searchMax(r->right, l+1,m);
  
 if(m<r->info) 
 m=r->info;
 
 searchMax(r->left, l+1,m);
 if(m<r->info) 
 m=r->info;
 cout<<m<<endl;
}
void main()
{
  //int s;
  int n=8;
  int a[8];
  cout<<"enter";
  for(int i=0;i<n;i++)
  {
    cin>>a[i];
  }
  root1 = NULL; 
  for (int i=0; i<n; i++)
  {
     root1 = stree(root1, root1, a[i]);
  }
  cout<<endl<<"print tree"<<endl;
  print_tree(root1, 0);
 
  int max=a[0];
searchMax(root1,0,max);
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.12.2011, 17:59
Ответы с готовыми решениями:

Бинарные деревья
Имею три файла: Скажите пожалуйста почему я не могу создать э-т m?(Класс tree) Он мне пишет - ...

Бинарные деревья
Доброго времени суток, нужна помощь, дали задание...Вершина бинарного дерева содержит ключ, строку...

Бинарные деревья С++
Добрый день! Дали такое задание на лабораторную работу. кое-что получилось, а в остальном прошу...

бинарные деревья
Вершина двоичного дерева содержит указатель на строку и указатели на правое и левое поддеревья....

5
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
06.12.2011, 18:16 2
Цитата Сообщение от Элвиc Посмотреть сообщение
находит максимальное или минимальное значение записей вершин непустого дерева;
Максимальное значение всегда будет листом правого поддерева. Минимальное - левого. Ну или наоборот, в зависимости от конфигурации дерева.
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
06.12.2011, 18:28 3
fasked, в дереве поиска да, но в произвольном дереве - нет.

Добавлено через 6 минут
Элвиc. могу дать дельный совет: для поиска максимального элемента используйте указатель на максимальный элемент, который сам определяется в функции, которая вызывает функцию поиска, тогда без проблем найдете. За начальное значение можно взять значение корня дерева.
1
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
06.12.2011, 18:48 4
Цитата Сообщение от Thinker Посмотреть сообщение
но в произвольном дереве - нет.
Прошу прощения, накосячил

C
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
#include <stdio.h>
 
struct btree_node {
   double data;
   struct btree_node *left;
   struct btree_node *right;
};
 
void find_min_traveler(struct btree_node *node, double *min) {
   if (node) {
      if (*min > node->data)
         *min = node->data;
         
      find_min_traveler(node->left, min);
      find_min_traveler(node->right, min);
   }
}
 
double find_min(struct btree_node *node) {
   double min = node->data;
   find_min_traveler(node, &min);
   
   return min;
}
 
void NODE_INIT(struct btree_node *node, double data, struct btree_node *left, struct btree_node *right) {
   (node)->data  = data, (node)->left  = left, (node)->right = right;
}
 
int main() {
   /* Tree init */
   struct btree_node nodes[6] = { { 0 } };
   struct btree_node *root = nodes;
 
   NODE_INIT(nodes + 3, 3.0, NULL, NULL);
   NODE_INIT(nodes + 4, 0.1, NULL, NULL);
   NODE_INIT(nodes + 5, 0.2, NULL, NULL);
   NODE_INIT(nodes + 1, 2.5, nodes + 3, NULL);
   NODE_INIT(nodes + 0, 1.5, nodes + 1, nodes + 2);
   NODE_INIT(nodes + 2, 1.0, nodes + 4, nodes + 5);
 
   /* Find min */
   printf("min = %lf\n", find_min(root));
   return 0;
}
На скорую руку. Но а вообще лучше возвращать указатель на узел с минимальным элементом.
1
5 / 0 / 0
Регистрация: 26.04.2011
Сообщений: 18
06.12.2011, 19:09  [ТС] 5
если не трудно можете мне написать рабочую структуру(она у меня называется "searchMax") которая будет искать отдельно максимальный и отдельно минимальный элемент именно в дереве. с помощью моей структуры он ищет максимальный но только в левой части дерева, а мне то нужно во всем...
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
06.12.2011, 19:12 6
Цитата Сообщение от Элвиc Посмотреть сообщение
рабочую структуру(она у меня называется "searchMax")
Не вижу такой структуры, есть функция.
Цитата Сообщение от Элвиc Посмотреть сообщение
если не трудно можете мне написать
Я Вам дал пример. Рассмотрите функции find_min и find_min_traveler и сделайте аналоги.
0
06.12.2011, 19:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.12.2011, 19:12
Помогаю со студенческими работами здесь

Бинарные деревья
Здравствуйте! Подскажите, правильно ли написано правое удаление вершины дерева? if(tree1-&gt;Right){...

Бинарные деревья
Возникла проблема с бинарными деревьями . Нужно определить K - количество узлов, ключ которых...

Бинарные деревья
Ребят, кто может помочь с написанием алгоритма программы? Сам код есть

Бинарные деревья
Очень нужна помощь, вообще деревья не понимаю!!!:( Вершина дерева содержит указатель на строку и N...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru