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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2020, 09:27   #1
Audax_Rogerus
Пользователь
 
Регистрация: 06.06.2020
Сообщений: 36
По умолчанию in-order для дерева 4 степени построенного на списке дочерних узлов, массиве структур 3 поля

Как сделать симметричный обход дерева 4-ой степени (С/С++), постороенного на списке дочерних узлов, массиве структур, 3 поля?

Структура, насколько я понял выглядит так (не уверен):

struct TreeNode
{
char key[3];
TreeNode* RightSib;
TreeNode* LeftChild;
};
Audax_Rogerus вне форума Ответить с цитированием
Старый 06.06.2020, 10:01   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

У меня только одна мысль: Т.А. Павловская, Программирование на ЯВУ, Паскаль (С++) есть оба варианта книг.
В книге про Паскаль (есть в списке литературы, в соответствующем разделе) есть пример кода для работы с бинарным деревом: создание, обход, вставка, удаление, ...
Если этого нет в книжке про С++, то думаю, что алгоритм можно вытащить из версии для Паскаля.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 06.06.2020, 19:32   #3
Audax_Rogerus
Пользователь
 
Регистрация: 06.06.2020
Сообщений: 36
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
У меня только одна мысль: Т.А. Павловская, Программирование на ЯВУ, Паскаль (С++) есть оба варианта книг.
В книге про Паскаль (есть в списке литературы, в соответствующем разделе) есть пример кода для работы с бинарным деревом: создание, обход, вставка, удаление, ...
Если этого нет в книжке про С++, то думаю, что алгоритм можно вытащить из версии для Паскаля.
Не все так просто... У меня не бинарное дерево, да и наворотов куча просто.
Audax_Rogerus вне форума Ответить с цитированием
Старый 06.06.2020, 21:01   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
struct TreeNode
{
    char key;
    TreeNode* children[4];
};
Скорее так выглядит структура узла. Хотя для чего еще одно поле в структуре, не могу придумать. Ну, пусть, например, для родителя.
Код:
struct TreeNode
{
    char key;
    TreeNode* parent;
    TreeNode* children[4];
};
А обход, предположу, children[0], children[1], key, children[2], children[3].
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 07.06.2020, 08:17   #5
Audax_Rogerus
Пользователь
 
Регистрация: 06.06.2020
Сообщений: 36
По умолчанию

Цитата:
Скорее так выглядит структура узла. Хотя для чего еще одно поле в структуре, не могу придумать. Ну, пусть, например, для родителя.
Код:
struct TreeNode
{
    char key;
    TreeNode* parent;
    TreeNode* children[4];
};
А обход, предположу, children[0], children[1], key, children[2], children[3].
Это массив дочерних узлов... а нужен список

Последний раз редактировалось BDA; 07.06.2020 в 19:38.
Audax_Rogerus вне форума Ответить с цитированием
Старый 07.06.2020, 19:44   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
struct TreeNode;

struct TreeNodeList
{
    TreeNode* node;
    TreeNodeList* next;
};

struct TreeNode
{
    char key;
    TreeNode* parent;
    TreeNodeList* children;
};
Ну вот будет список.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 08.06.2020, 07:26   #7
Audax_Rogerus
Пользователь
 
Регистрация: 06.06.2020
Сообщений: 36
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Tree
Цитата:
Сообщение от BDA Посмотреть сообщение
Код:
struct TreeNode;

struct TreeNodeList
{
    TreeNode* node;
    TreeNodeList* next;
};

struct TreeNode
{
    char key;
    TreeNode* parent;
    TreeNodeList* children;
};
Ну вот будет список.
Хорошо! А как будет выглядит in-order именно в коде?
Audax_Rogerus вне форума Ответить с цитированием
Старый 08.06.2020, 07:41   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Примерно:
Код:
TreeNodeList* tmp = tnode->children;
int count = 0;
while (tmp && count < 2) {
    go(tmp->node);
    tmp = tmp->next;
    ++count;
}
print(tnode->key);
while (tmp && count < 4) {
    go(tmp->node);
    tmp = tmp->next;
    ++count;
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 08.06.2020, 07:54   #9
Audax_Rogerus
Пользователь
 
Регистрация: 06.06.2020
Сообщений: 36
По умолчанию

Код:
void PrintTree(TreeNode* Root)
{
	if (Root == nullptr)
	{
		return;
	}
	else
	{
		cout << Root->key << endl;
		PrintTree(Root->Children->Node);
		PrintTree(Root->Children->pNext->Node);
		PrintTree(Root->Children->pNext->pNext->Node);
		PrintTree(Root->Children->pNext->pNext->pNext->Node);
	}
}
Такой вариант может быть или он неверен?
Audax_Rogerus вне форума Ответить с цитированием
Старый 08.06.2020, 08:14   #10
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Такой код реализует pre-order, а не in-order. Так "обойти" список можно только если в нем есть TreeNodeList для отсутствующих детей тоже (Node = nullptr).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление узлов в односвязном списке Niklitel Помощь студентам 1 01.03.2014 14:41
Количество дочерних элементов дерева ds.Dante SQL, базы данных 2 09.01.2013 21:59
Запрограммировать и отладить алгоритм обхода построенного бинарного дерева слева направо romantik1993 Помощь студентам 3 14.10.2012 14:09
Дерево в БД Ассеss(удаление дочерних узлов) atihiy2010 БД в Delphi 2 14.03.2011 22:45
удаление узлов из дерева ArniLand Общие вопросы по Java, Java SE, Kotlin 0 22.09.2010 21:36