Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> помогите создать бинарное дерево (4 указателя) 
V
    Опции темы
Podarochek
Дата 11.3.2008, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 2.11.2007

Репутация: нет
Всего: нет



как создать бинарное дерево понятно...=>


struct tree{
    int Key;//полезные данные (ключ)
    tree *Left, *Right;//ссылки на сыновей
};

tree* MakeTree (tree*Tree,int data[], int &from, int n)
{
    
    int n1, n2;
    if ( n == 0 ) return NULL;//ограничение рекурсии
    Tree = new tree;//выделить память под вершину
    Tree->Key = data[from++];//записать данные и перейти к следующему элементу
    n1 = n / 2;//размеры левого 
    n2 = n - n1 - 1;//и правого поддеревьев
    Tree->Left = MakeTree(Tree,data, from, n1);
    Tree->Right = MakeTree(Tree,data, from, n2);
    return Tree;
}


вопрос как создать дерево с четырмя указателями??? что-то не идет...:(


struct tree
{
    int val;
    tree *p[4]; // Массив указателей на элементы структур данных
};
PM MAIL   Вверх
bsa
Дата 11.3.2008, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



передавать массивы да еще и в рекурсивных функциях очень неблагодарное занятие. Передавай лучше указатель:
tree* MakeTree (tree*Tree, const int *data, int &from, int n)
PM   Вверх
andrew_121
Дата 11.3.2008, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



Podarochek, что-то я не очень понимаю - ЗАЧЕМ 4-ри ???



--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Podarochek
Дата 11.3.2008, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 2.11.2007

Репутация: нет
Всего: нет



Цитата(bsa @  11.3.2008,  00:30 Найти цитируемый пост)
передавать массивы да еще и в рекурсивных функциях очень неблагодарное занятие. Передавай лучше указатель:
tree* MakeTree (tree*Tree, const int *data, int &from, int n) 


??? так массивы по умолчанию передаются по ссылке...


Цитата(andrew_121 @  11.3.2008,  00:46 Найти цитируемый пост)
Podarochek, что-то я не очень понимаю - ЗАЧЕМ 4-ри ???


с учебной целью...
PM MAIL   Вверх
andrew_121
Дата 11.3.2008, 01:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



У узла два указателя - на сыновей, а еще два на что должны указывать ???
Я думаю это возможно, но с какой целью, и что из этого получиться, бинарное дерево или мутант, какой-то...
Читай: http://ru.wikipedia.org/wiki/%D0%94%D0%B2%...%B5%D0%B2%D0%BE



--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Podarochek
Дата 11.3.2008, 01:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 2.11.2007

Репутация: нет
Всего: нет



Цитата(andrew_121 @  11.3.2008,  01:00 Найти цитируемый пост)
У узла два указателя - на сыновей, а еще два на что должны указывать ???
Я думаю это возможно, но с какой целью, и что из этого получиться, бинарное дерево или мутант, какой-то...


smile Идет реч не о бинарном дереве, а о создании дерева с элементами с 4 потомками...не для  практического приминения, а для эксперемента...пример бинарного дерева приведен выше...там все ок...
PM MAIL   Вверх
korian
Дата 11.3.2008, 03:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

Репутация: 3
Всего: 17



если я правильно понял...
Код

struct tree
{
    int val;
    tree *p[4]; // Массив указателей на элементы структур данных
}; 

tree* MakeTree (tree*Tree,int data[], int &from, int n)
{
    
    int n1, n2, n3, n4;
    if ( n == 0 ) return NULL;//ограничение рекурсии
    Tree = new tree;//выделить память под вершину
    Tree->val = data[from++];//записать данные и перейти к следующему элементу
    n1 = n2 = n3 = n / 4; //размеры первого, второго, третьего
    n4 = n - n1 - n2 - n3 - 1; //четвертого
    Tree->p[0] = MakeTree(Tree,data, from, n1);
    Tree->p[1] = MakeTree(Tree,data, from, n2);
    Tree->p[2] = MakeTree(Tree,data, from, n3);
    Tree->p[3] = MakeTree(Tree,data, from, n4);
    return Tree;
}


PM   Вверх
Mayk
Дата 11.3.2008, 06:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134




Цитата(Podarochek @  11.3.2008,  04:52 Найти цитируемый пост)

??? так массивы по умолчанию передаются по ссылке...

Вообще это передача указателя а не ссылки. ЕМНИП это не менялось со времён форка от си.

Цитата(andrew_121 @  11.3.2008,  05:00 Найти цитируемый пост)
У узла два указателя - на сыновей, а еще два на что должны указывать ???

Например на родителя. 

Podarochek, заменил бы массив на std::vector<tree*> сразу  smile 


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Podarochek
Дата 11.3.2008, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 2.11.2007

Репутация: нет
Всего: нет



Цитата(Mayk @  11.3.2008,  06:42 Найти цитируемый пост)
Вообще это передача указателя а не ссылки. ЕМНИП это не менялось со времён форка от си.


имеется ввиду ссылка как неявный указатель, поскольку никто в определении не указывал явно *..., а так согласен что передается указатель на начало массива...


korian - ОГРОМНОЕ СПАСИБО!!!! ПОНЯЛ ПРАВИЛЬНО!!! smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0497 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.