![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 11.11.2011
Сообщений: 20
|
![]()
Есть алгоритм поиска по дереву. Как бы всё работает только на первом узле (поиск в узле и его потомках), а дальше не идет.
Подскажите, в чем ошибка кода? PHP код:
|
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 07.01.2010
Сообщений: 141
|
![]()
Алгоритм поиска корректный. А вот дерево вы строите неправильно.
сперва вы в root вставляете node2, и только после этого в node2 вставляете чилдренов. но само рутовое дерево от вставки в node2 уже не меняется. |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 11.11.2011
Сообщений: 20
|
![]()
Я не могу сразу добавлять потомков, так как их не задекларировал, а добавляю уже после. Да к тому же параметр children - это вектор, и к нему просто дописывается. И на первом уровне после root-а работает, а уже второй не видит.
Дерево вот так выглядит Код:
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 07.01.2010
Сообщений: 141
|
![]()
еще раз. дерево в коде строится неверно. вы хотите такое, которое привели, а на самом деле оно другое. когда вы вставляете в node2 нового чилдрена, он вставляется в узел node2. это не тот узел, который в рутовом дереве. в рутовом дереве копия node2. вам нужно получить указатель/ссылку на узел из рута и добавлять чилдренов используя этот указатель/ссылку.
|
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 11.11.2011
Сообщений: 20
|
![]()
А можешь показать пример, я понял...., но не понял как это реализовать.
|
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 07.01.2010
Сообщений: 141
|
![]()
ну например можно вот так:
Код:
|
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 07.01.2010
Сообщений: 141
|
![]()
кстати, тут нужно быть осторожным. из-за того, что заюзан вектор, могут быть проблемы при его росте. вектор может перевыделить большый кусок памяти и скопировать свое содержимое в новую память. в этом случае все ранее полученные ссылки на содержимое вектора станут невалидными. если заранее известено количество элементов в векторе, то поможет std::vector<>::reserve(n); иначе придется использовать другой контейнер. у узловых контейнеров такой проблемы нет. в случае если работаем только с указателями на внутренности (не итераторами), то пойдет std:
![]() |
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 11.11.2011
Сообщений: 20
|
![]()
А объясни, пожалуйста, как работает eque<> что это?
Последний раз редактировалось murzilka6002; 23.11.2011 в 23:51. |
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 07.01.2010
Сообщений: 141
|
![]()
код в студию.
|
![]() |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 11.11.2011
Сообщений: 20
|
![]() PHP код:
А как реализовать eque<> ? |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ошибка в алгоритме слияние массивов | ATAMAN200 | Общие вопросы C/C++ | 3 | 25.10.2010 20:37 |
Ошибка в алгоритме?Выдает ошибку после компиляции. | Aerial | Общие вопросы C/C++ | 2 | 12.05.2010 16:52 |
Ошибка в алгоритме сортировки в теме "ДЛЯ СТУДЕНТОВ !!!" | Darth.Vader | Общие вопросы C/C++ | 0 | 06.12.2009 15:21 |
Ошибка в алгоритме нахождения тройки чисел с максимальным произведением | k1r1ch | Паскаль, Turbo Pascal, PascalABC.NET | 7 | 22.10.2009 22:30 |
Ошибка в алгоритме программы на бинарные фйлы | ROD | Общие вопросы C/C++ | 0 | 15.04.2009 22:15 |