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

Ошибка в методе обрабатывающем бинарное дерево - C++

Восстановить пароль Регистрация
 
KobaEugeneA
5 / 5 / 0
Регистрация: 16.01.2011
Сообщений: 166
06.04.2014, 17:12     Ошибка в методе обрабатывающем бинарное дерево #1
Есть метод обрабатывающий бинарное дерево и состовляющий двумерный массив указателей на листья, так что в первой строке - указатель на root, во второй - листья второго уровня и так далее. Вот сам метод:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void view_alternative(tree* root){
  tree* b[50][50];
  for(int i = 0; i < 50; i++)
    for(int j = 0; j < 50; j++)
      b[i][j] = NULL;
  int n = 0, m = 1, m1;
  b[0][0] = root;
  while(m != 0){
    m1 = m;
    m = 0;
    for(int i = 0; i < m1; i++){
      if(b[n][i] -> left != NULL){
    b[n + 1][m] = b[n][i] -> left;
    m++;
      }
      if(b[n][i] -> right != NULL){
    b[n + 1][m] = b[n][i] -> right;
    m++;
      }
      n++;
    }
  }
}
Почти при любых раскладах выдаёт: Segmentation fault (core dumped)
В чём ошибка может быть? Вот программа составляющая дерево, но она точно работает правильно:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <stdio.h>
struct tree{int a; tree* left; tree* right;};
using namespace std;
tree* find_place(tree*, int);
void view(tree*, int);
void view_alternative(tree*);
main(){
  int n;
  tree* root = new tree;
  cin >> n;
  int* a = new int[n];
  for(int i = 0; i < n; i++)
    cin >> a[i];
  root -> a = a[0];
  root -> left = NULL;
  root -> right = NULL;
  tree* eL;
  for(int i = 1; i < n; i++){
    eL = find_place(root, a[i]);
    eL -> a = a[i];
    eL -> left = NULL;
    eL -> right = NULL;
  }
  view_alternative(root);
}
tree* find_place(tree *root, int a){
  if(root -> a > a){
    if(root -> left == NULL){
      root -> left = new tree;
      return root -> left;
    }
    else
      return find_place(root -> left, a);
  }
  else{
    if(root -> right == NULL){
      root -> right = new tree;
      return root -> right;
    }
   else
     return find_place(root -> right, a);
  }
}


Добавлено через 1 час 56 минут
Сколько не смотрю, вообще не могу понять в чем ошибка то.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.04.2014, 17:12     Ошибка в методе обрабатывающем бинарное дерево
Посмотрите здесь:

Бинарное дерево C++
Бинарное дерево C++
C++ Дерево бинарное
C++ Бинарное дерево
C++ бинарное дерево
Бинарное дерево C++
C++ Бинарное дерево
Бинарное дерево C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5947 / 5552 / 1784
Регистрация: 18.12.2011
Сообщений: 14,184
Завершенные тесты: 1
06.04.2014, 17:30     Ошибка в методе обрабатывающем бинарное дерево #2
Цитата Сообщение от KobaEugeneA Посмотреть сообщение
выдаёт: Segmentation fault
У меня не выдает.
Перед выходом из view_alternative(tree* root)
массив b содержит
b[0][0]->root.right0->root.right1->root.right2->root.right3....
b[1][0]->root.right1->root.right2->root.right3....
b[2][0]->root.right2->root.right3....
b[3][0]->root.right3....
Остальные указатели нулевые.
Так и задумано?
Кстати, Вы его из функции не возвращаете.
Тогда зачем все это?
KobaEugeneA
5 / 5 / 0
Регистрация: 16.01.2011
Сообщений: 166
06.04.2014, 17:38  [ТС]     Ошибка в методе обрабатывающем бинарное дерево #3
Я на g++ компилировал.
А почему там нету указателей на left?
Не возвращает, там так и задумано, я дорабатывать ещё буду.
Yandex
Объявления
06.04.2014, 17:38     Ошибка в методе обрабатывающем бинарное дерево
Ответ Создать тему
Опции темы

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