Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/47: Рейтинг темы: голосов - 47, средняя оценка - 4.55
0 / 0 / 1
Регистрация: 06.06.2013
Сообщений: 41
1

Построить бинарное дерево поиска из букв строки, вводимой пользователем

07.06.2013, 21:00. Показов 8769. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Не совсем понимаю как сделать данное задание, так и в плане реализации, помогите:
"Построить бинарное дерево поиска из букв строки, вводимой пользователем. Разработать функцию, которая для заданной буквы определяет число узлов в правом и левом поддеревьях."
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.06.2013, 21:00
Ответы с готовыми решениями:

На основе вводимой с клавиатуры последовательности чисел до первого нуля формируется бинарное дерево поиска
Страшно каюсь, не подумайте что я ленивый тюлень и мне не хочется вникать в тему, обычно я никогда...

Структура, по строкам построить бинарное дерево поиска
помогите найти ошибку в этом коде. Этот код должен по строкам построить бинарное дерево поиска...

Исходное бинарное дерево превратить в бинарное дерево поиска, при этом сохранив его структуру
Помогите, не могу понять!( Нужно исходное бинарное дерево превратить в бинарное дерево поиска, при...

Построить бинарное дерево поиска, содержащее заданные числа
Дана последовательность чисел. Построить бинарное дерево поиска, содержащее эти числа. Для числа...

4
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
07.06.2013, 21:26 2
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
#include<stdio.h>
#include<stdlib.h>
 
typedef struct NODE
{
    char key;
    long count;
    struct NODE *left, *right;
} NODE;
 
void Insert(NODE **q, char x)
{
   if (*q == NULL)
   {
       *q = (NODE *)malloc(sizeof(NODE));
       (*q)->key = x;
       (*q)->count = 1;
       (*q)->left = (*q)->right = NULL;
   }
   else
   {
      if ((*q)->key == x)
          ((*q)->count)++;
      else
         if ((*q)->key > x)
             Insert(&((*q)->left), x);
         else Insert(&((*q)->right), x);
   }
}
 
void Display(NODE *q)
{
   if (q != NULL)
   {
      Display(q->left);
      printf("%c : %d\n", q->key, q->count);
      Display(q->right);
   }
}
 
long Count(NODE *q)
{
   return q == NULL ? 0 : 1 + Count(q->left) + Count(q->right);
}
 
NODE *Search(NODE *q, char x)
{
   if (q == NULL)
      return NULL;
   else
      if (q->key == x)
         return q;
      else
         if (q->key > x)
            return Search(q->left, x);
         else
            return Search(q->right, x);
}
 
int main()
{
   NODE *root = NULL, *q;
   char s[] = "abcdeaba", *ps, c = 'a';
   for(ps = s; *ps; ++ps)
      Insert(&root, *ps);
   Display(root);
   if (q = Search(root, c))
   {
       printf("left: %d\n", Count(q->left));
       printf("right: %d\n", Count(q->right));
   }
   else puts("no");
   return 0;
}
2
0 / 0 / 1
Регистрация: 06.06.2013
Сообщений: 41
08.06.2013, 13:48  [ТС] 3
Thinker, Большое спасибо, не могли бы Вы привести некоторые общие комментарии по данному коду?
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
09.06.2013, 21:43 4
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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
#include<stdio.h>
#include<stdlib.h>
 
// описание элемента дерева поиска 
typedef struct NODE
{
    char key;
    long count;
    struct NODE *left, *right;
} NODE;
 
// вставка элемента со значением x в дерево поиска
void Insert(NODE **q, char x)
{
   if (*q == NULL)
   {
       *q = (NODE *)malloc(sizeof(NODE));
       (*q)->key = x;
       (*q)->count = 1;
       (*q)->left = (*q)->right = NULL;
   }
   else
   {
      if ((*q)->key == x)
          ((*q)->count)++;
      else
         if ((*q)->key > x)
             Insert(&((*q)->left), x);
         else Insert(&((*q)->right), x);
   }
}
 
// вывод элементов дерева поиска на экран в порядке возрастания и количеством повторений
void Display(NODE *q)
{
   if (q != NULL)
   {
      Display(q->left);
      printf("%c : %d\n", q->key, q->count);
      Display(q->right);
   }
}
 
// количество вершин
long Count(NODE *q)
{
   return q == NULL ? 0 : 1 + Count(q->left) + Count(q->right);
}
 
// поиск вершины с определенным значением
NODE *Search(NODE *q, char x)
{
   if (q == NULL)
      return NULL;
   else
      if (q->key == x)
         return q;
      else
         if (q->key > x)
            return Search(q->left, x);
         else
            return Search(q->right, x);
}
 
int main()
{
   NODE *root = NULL, *q;
   char s[] = "abcdeaba", *ps, c = 'a';
   for(ps = s; *ps; ++ps)
      Insert(&root, *ps);
   Display(root);
   if (q = Search(root, c))
   {
       printf("left: %d\n", Count(q->left));
       printf("right: %d\n", Count(q->right));
   }
   else puts("no");
   return 0;
}
2
0 / 0 / 0
Регистрация: 12.05.2019
Сообщений: 38
16.01.2020, 19:54 5
Объясните, пожалуйста, что выполняется в этом цикле?

Цитата Сообщение от Thinker Посмотреть сообщение
for(ps = s; *ps; ++ps)
      Insert(&root, *ps);
0
16.01.2020, 19:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.01.2020, 19:54
Помогаю со студенческими работами здесь

Ввести 10-15 целых чисел и построить из них бинарное дерево поиска
Ввести 10-15 целых чисел и построить из них бинарное дерево поиска . Хелп плиз , вообще не вкуриваю...

Строки и Бинарное дерево поиска
Доброго времени суток Уважаемые программисты! Подскажите как реализовать следующую задачу с...

Построить бинарное дерево поиска получающееся в результате вставки ключевых слов
Пусть в узлах дерева находятся символьные стро ки. Постройте бинарное дерево поиска, которое...

Построить бинарное дерево поиска. Определить уровень узла с максимальным элементом
Из входной последовательности вещественных чисел построить бинарное дерево поиска. Определить...

Построить бинарное дерево поиска.Вычислить сумму элементов, являющихся листьями
Помогите построить бинарное дерево поиска.Вычислить сумму элементов, являющихся листьями

Построить идеально сбалансированное бинарное дерево поиска и обеспечить поиск указанных записей
Вообщем написал программу и не уверен, что правильно работает балансировка( При нечетном...


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

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