|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
23.11.2011, 22:01 | #1 |
Пользователь
Регистрация: 11.11.2011
Сообщений: 20
|
Ошибка в алгоритме поиска
Есть алгоритм поиска по дереву. Как бы всё работает только на первом узле (поиск в узле и его потомках), а дальше не идет.
Подскажите, в чем ошибка кода? PHP код:
|
23.11.2011, 22:50 | #2 |
Форумчанин
Регистрация: 07.01.2010
Сообщений: 141
|
Алгоритм поиска корректный. А вот дерево вы строите неправильно.
сперва вы в root вставляете node2, и только после этого в node2 вставляете чилдренов. но само рутовое дерево от вставки в node2 уже не меняется. |
23.11.2011, 23:20 | #3 |
Пользователь
Регистрация: 11.11.2011
Сообщений: 20
|
Я не могу сразу добавлять потомков, так как их не задекларировал, а добавляю уже после. Да к тому же параметр children - это вектор, и к нему просто дописывается. И на первом уровне после root-а работает, а уже второй не видит.
Дерево вот так выглядит Код:
|
23.11.2011, 23:27 | #4 |
Форумчанин
Регистрация: 07.01.2010
Сообщений: 141
|
еще раз. дерево в коде строится неверно. вы хотите такое, которое привели, а на самом деле оно другое. когда вы вставляете в node2 нового чилдрена, он вставляется в узел node2. это не тот узел, который в рутовом дереве. в рутовом дереве копия node2. вам нужно получить указатель/ссылку на узел из рута и добавлять чилдренов используя этот указатель/ссылку.
|
23.11.2011, 23:30 | #5 |
Пользователь
Регистрация: 11.11.2011
Сообщений: 20
|
А можешь показать пример, я понял...., но не понял как это реализовать.
|
23.11.2011, 23:36 | #6 |
Форумчанин
Регистрация: 07.01.2010
Сообщений: 141
|
ну например можно вот так:
Код:
|
23.11.2011, 23:41 | #7 |
Форумчанин
Регистрация: 07.01.2010
Сообщений: 141
|
кстати, тут нужно быть осторожным. из-за того, что заюзан вектор, могут быть проблемы при его росте. вектор может перевыделить большый кусок памяти и скопировать свое содержимое в новую память. в этом случае все ранее полученные ссылки на содержимое вектора станут невалидными. если заранее известено количество элементов в векторе, то поможет std::vector<>::reserve(n); иначе придется использовать другой контейнер. у узловых контейнеров такой проблемы нет. в случае если работаем только с указателями на внутренности (не итераторами), то пойдет std:eque<>
|
23.11.2011, 23:47 | #8 |
Пользователь
Регистрация: 11.11.2011
Сообщений: 20
|
А объясни, пожалуйста, как работает eque<> что это?
Последний раз редактировалось murzilka6002; 23.11.2011 в 23:51. |
23.11.2011, 23:48 | #9 |
Форумчанин
Регистрация: 07.01.2010
Сообщений: 141
|
код в студию.
|
23.11.2011, 23:59 | #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 |