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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
#1

Дерево. Поуровневая связь - C++

10.05.2013, 15:17. Просмотров 763. Ответов 1
Метки нет (Все метки)

Имеется структура следующего вида:
C++
1
2
3
4
5
6
7
struct BinTree
{
    int key;
    Node* left;
    Node* right;
    Node* level;
};
Нужно написать функцию которая осуществляет связь при помощи указателя level на стуктуру такого же типа по схеме (за ранее подразумевается что указатели level = 0):
Миниатюры
Дерево. Поуровневая связь  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2013, 15:17     Дерево. Поуровневая связь
Посмотрите здесь:

Связь по TCP C++
C++ Связь с интернетом
сортировка и связь массивов C++
Связь массивов и указателей C++
C++ Связь нескольких форм
C++ Связь классов и методов
C++ С++ , связь программ
Связь списков C++
C++ C++ связь символов ?
Связь между программами C++
C++ Связь массива и указателей
Связь между 2 классами C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
10.05.2013, 23:07  [ТС]     Дерево. Поуровневая связь #2
Если брать за пример рисунок, то со связью 1->3 и 5->7 можно осуществить легко при помощи рекурсивной функции. Но вот как связать 3->5 для меня проблема.

Добавлено через 4 часа 55 минут
Мне не обязательно показывать готовое решение , достаточно поделится своими соображениями.

Добавлено через 2 часа 51 минуту
Метод топора:
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
void getLevel(Node* n, int lvl, std::map<Node*, int>& mp)
{
    if (!n)
    {
        return;
    }
 
    getLevel(n->left, lvl + 1, mp);
    int& l = mp[n];
    l = lvl;
    getLevel(n->right, lvl + 1, mp);
}
 
void linkSameLevel(Node* t)
{
    std::map<Node*, int> link;
    getLevel(t, 0, link);
    
    for (std::map<Node*, int>::iterator i = link.begin(); i != link.end(); ++i)
    {
        std::map<Node*, int>::iterator j = link.begin();
        for ( ++j; j != link.end(); ++j)
        {
            if (i->second == j->second)
            {
                i->first->level = j->first;
                i = j;
            }
        }
    }
}
Yandex
Объявления
10.05.2013, 23:07     Дерево. Поуровневая связь
Ответ Создать тему
Опции темы

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