С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
19 / 19 / 5
Регистрация: 17.10.2010
Сообщений: 247

Постройка бин. дерева

06.04.2011, 21:50. Показов 1269. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
помогите, не строится дерево
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
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
using namespace std;
 
struct tree
{
    int m;
    tree* l;
    tree* r;
};
 
 
void clean (tree*p)
{
  if(p)
  {
    clean (p->l);
    clean (p->r);
    delete p; 
  }
}
void find (int x,tree* p)
{   
  if  (p==NULL)// net vershiny
  {
    p=new tree;
    p->m=x;     
    p->l=NULL; p->r=NULL;
    return;
  }
    if  (x<p->m) find (x,p->l);
    else     find (x,p->r);
}
 
void Build (int &x,tree* p)
{
  cout<<"Вводите числа, для завершения введите 0: ";
  cin>>x;
  while(x) 
    {
        find (x,p); cin>>x;
    }
}
void ObhodLeft (tree* p)//Левосторонний обход дерева.
{
  if(p)
  {
    cout<<p->m<<" ";
    ObhodLeft (p->l);
    ObhodLeft (p->r);
  }
}
 
void print (tree* p,int ln)
{
  if(p)
  { 
    print (p->r,ln+1);
    for  (int i=1; i<=ln; i++) cout<<"   ";
    cout<<p->m<<endl;
    print (p->l,ln+1);
  }  
}
 
 
void main()
{   
    int x;
    int ln=1;
    tree* p=NULL;
     Build (x,p);
     system("pause");
     system("CLS");
     ObhodLeft (p);
        system("pause");
        system("CLS");
     print(p,ln);
        system("pause");
        system("CLS");
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.04.2011, 21:50
Ответы с готовыми решениями:

Сохранение и чтение бин. дерева
написал функцию хранения дереваint save(node* p) { char fname ; if (p==0) {cout&lt;&lt;&quot;Пусто&quot;;Sleep(500);return -1;} ...

Рекурсив. обход бин. дерева поиска
Доброе утро. Имею следующий код : print_tree(bintree *p){ if(p){ print_tree(p-&gt;left); cout&lt;&lt;p-&gt;inf&lt;&lt;&quot; ...

Пошаговая постройка фрактального дерева
Задача стоит такая: 1) нарисовать фрактальное дерево; 2) при нажатии на кнопку пользователь разрешает приступить к следующему этапу...

3
 Аватар для olleg90
40 / 40 / 12
Регистрация: 06.01.2011
Сообщений: 90
07.04.2011, 19:09
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
#include <stdio.h>
#include <conio.h>
 
struct node // Структура узла
{
  int info;      // Информационное поле
  int c;         // Счетчик
  node *ll, *rl; // Левый и правый указатели
};
 
// -------Функция построения дерева---------
 
node *tree(node *p, int w)
{
  if (p == NULL)
  {
    p = new node;
    p->info = w;
    p->ll = NULL;
    p->rl = NULL;
    p->c = 1;
  }
  else if (w == p->info) // Если такая информация встречалась,
  {
    p->c = p->c + 1; // то счетчик количества увеличивается на 1
  }
  else if (w < p->info) // eсли меньше, то идем по левому указателю
  {
    p->ll = tree(p->ll, w);
  }
  else
  {
    p->rl = tree(p->rl, w); // иначе по правому
  }
 
  return p; }
 
//--------- Функция обхода дерева -------------
 
void treeprint(node *p)
{
  if (p != NULL)
  {
    treeprint(p->ll); // по левому указателю
    printf("%d\t%d\n", p->c, p->info);
    treeprint(p->rl); // по правому указателю
  }
}
 
void main()
{
  node *root; // Рабочий указатель на корень дерева
  int w; // Буферная переменная
  root = NULL; //Дерево пустое
  scanf("%d", &w);
 
  while (!feof(stdin))
  {
    root = tree(root, w);
    scanf("%d", &w);
  }
 
  treeprint(root);
}
Добавлено через 23 секунды
думаю разберешься)
1
19 / 19 / 5
Регистрация: 17.10.2010
Сообщений: 247
19.04.2011, 17:55  [ТС]
Сохраняю дерево в файл текстовый:
1
22
44
55
55
55
43
90
теперь надо считать... вот тут и возникли трудности, требуется ваша помощь:
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
// создание дерва из переданого в параметре W
node *tree(node *p, int w)
{
  if (p==NULL)
  {
    p = new node;
    i++;
    j++;
    p->info=w;
    p->l=NULL;
    p->r=NULL;
    p->c=1;
  }
  else if (w==p->info) // Если такая информация встречалась,
         {
          p->c+=1;
          j++; // то счетчик количества увеличивается на 1
         }
  else if (w<p->info) // eсли меньше, то идем по левому указателю
        {
         p->l=tree(p->l,w);
         }
  else
     {
    p->r=tree(p->r,w); // иначе по правому
     }
  return p; 
 
 
//мой код считывания
void read(node* &root)
{
    int c=0;
    FILE* d;
    ifstream dataIn;
    char fname [30];
    cout<<"Введите имя (путь) к файлу: \n";
    cin>>fname;
    d=fopen(fname,"rt");
        if(d)
        {
            while(!feof(d))
                    {   
                        fscanf(d,"%f",c);
                        fseek(d,0,SEEK_SET);
                        root=tree(root,c);
                    }
                    system("pause");
        }
            else cout<<"Не удалось открыть файл для чтения\n";Sleep(500);
}
}
0
 Аватар для olleg90
40 / 40 / 12
Регистрация: 06.01.2011
Сообщений: 90
21.04.2011, 16:10
сформулируйте задание я вас не совсем понял))

Добавлено через 17 минут
у вас функция
C++
1
node *tree(node *p, int w)
добавляет в дерево один переданный узел


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void main()
{
  node *root; // Рабочий указатель на корень дерева
  int w; // Буферная переменная
  root = NULL; //Дерево пустое
  scanf("%d", &w);
 
   while (!feof(stdin))
  {
    root = tree(root, w);
    scanf("%d", &w);
  }
 
  treeprint(root);
}
в фрагменте
C++
1
2
3
4
5
  while (!feof(stdin))
  {
    root = tree(root, w);
    scanf("%d", &w);
  }
мы добавляем один элемент дерева пока не введем нуль символ т.е. пока у нас не кончиться файл клвиатура!
вам просто надо файл клавиатуры -
C++
1
stdin
заменить на указатель текстового файла.
получиться примерно следующее.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void main()
{
  node *root; // Рабочий указатель на корень дерева
  int w; // Буферная переменная
  root = NULL; //Дерево пустое
 in=fopen("in.txt","r");//in.txt -ваш файл 
fscanf(in,"%d", &w);
   while (!feof(in))
  {
    root = tree(root, w);
    fscanf(in,"%d", &w);
  }
 
  treeprint(root);
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.04.2011, 16:10
Помогаю со студенческими работами здесь

Операции над бинарными деревьями: построение дерева, обход дерева, вставка и удаление элемента дерева
Пожалуйста кто сможет, помогите составить программу: Организация по трудоустройству населения сохраняет резюме клиентов в виде бинарного...

Спарсить данные по БИН
Есть сайт...

Подскажите почему не автоварится бин
Использую spring mvc. Если делать getBean из контекста, то бин прекрасно берется из контекста. Если сделать его @Autowire , то он не...

Как деплоить бин в JBoss 3.2?
как деплоить бин в жбосс? работаю в JBuilder 7 ЕЕ, JBoss 3.2.0, MySQL. проблема такая: разбираю стандартный пример Titan. ...

Добавление элемента в бин. дерево
Нужно написать программу для добавления элемента в бинарное дерево перед указанным значением. Сделала создание бинарного дерева примерно...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru