Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
vaselo
19 / 19 / 1
Регистрация: 17.10.2010
Сообщений: 247
06.04.2011, 21:50     Постройка бин. дерева #1
помогите, не строится дерево
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");
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
olleg90
 Аватар для olleg90
34 / 34 / 6
Регистрация: 06.01.2011
Сообщений: 90
07.04.2011, 19:09     Постройка бин. дерева #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
#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 секунды
думаю разберешься)
vaselo
19 / 19 / 1
Регистрация: 17.10.2010
Сообщений: 247
19.04.2011, 17:55  [ТС]     Постройка бин. дерева #3
Сохраняю дерево в файл текстовый:
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);
}
}
olleg90
 Аватар для olleg90
34 / 34 / 6
Регистрация: 06.01.2011
Сообщений: 90
21.04.2011, 16:10     Постройка бин. дерева #4
сформулируйте задание я вас не совсем понял))

Добавлено через 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);
}
Yandex
Объявления
21.04.2011, 16:10     Постройка бин. дерева
Ответ Создать тему
Опции темы

Текущее время: 13:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru