Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.11.2012, 22:13   #1
stud1
Новичок
Джуниор
 
Регистрация: 28.11.2012
Сообщений: 3
По умолчанию Деревья С++

Добрый вечер. Возникла проблема с написанием рекурсивной функции создания дерева. В интернете полно примеров как строить бинарные деревья, но мое дерево таковым не является, т.к. имеет следующий вид: корневая вершина содержит 9 вершин, каждая из которых содержит 8, каждая из которых содержит 7, ну и так далее. В общем, дерево имеет 9! вершин. Как мне создать такое дерево с помощью рекурсии?
stud1 вне форума Ответить с цитированием
Старый 28.11.2012, 22:19   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Скорее вопрос, как это дерево должно храниться. Для бинарного дерева всё просто: каждый узел - содержание и два указателя на младшие узлы (возможно, пустые). В Вашем случае что, у каждого элемента по 9 указателей?
Abstraction вне форума Ответить с цитированием
Старый 28.11.2012, 22:23   #3
stud1
Новичок
Джуниор
 
Регистрация: 28.11.2012
Сообщений: 3
По умолчанию

Да. Хотя это и не правильно, т.к. все 9 будут использоваться лишь у корневой вершины, но мне бы сначала хотя бы так построить.
stud1 вне форума Ответить с цитированием
Старый 28.11.2012, 22:57   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Пусть у vertex есть массив children из 9 указателей на vertex. Тогда
Код:
vertex* BuildNineTreeRec(vertex* v, int level){
  for(int i=0; i<level; ++i) v->children[i] = BuildNineTreeRec(new vertex, level-1);
  return v;
}

vertex* BuildNineTree(void){
  return BuildNineTreeRec(new vertex, 9);
}
Abstraction вне форума Ответить с цитированием
Старый 29.11.2012, 22:53   #5
stud1
Новичок
Джуниор
 
Регистрация: 28.11.2012
Сообщений: 3
По умолчанию

Спасибо. Однако возник небольшой вопрос - в какой последовательности строятся вершины этого дерева?
Код:
int n=0;
vertex* BuildNineTreeRec(vertex* v, int level)
{
  for(int i=0; i<level; ++i)
  {
    v->x=n;
    n++;
    v->children[i] = BuildNineTreeRec(new vertex, level-1);
  }
  return v;
}
Однако когда я пытаюсь вывести на экран первую вершину:
Код:
first=first->children[0];
printf("%i",first->x);
То он выдает 95901, а в моем понимаи должен 1...
stud1 вне форума Ответить с цитированием
Старый 30.11.2012, 00:12   #6
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Вы v->x присваиваете разные значения раз за разом, обратите внимание. Последний раз значение присвоится (то, которое останется) на последней итерации цикла. Вынесите этот код перед циклом - будет Вам 1.
Abstraction вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Деревья на с++ trum Помощь студентам 2 03.05.2012 22:55
Деревья amfisat Помощь студентам 1 29.05.2010 22:26
Деревья на С++ osichev Помощь студентам 0 11.12.2009 21:51
деревья в С++ osichev Помощь студентам 0 10.12.2009 19:48
Деревья Марат707 Microsoft Office Word 1 07.12.2008 14:24