Прошк прощения, что сразу не уточнил. Нужно найти указатель на узел, который указывает на current. В узлах содержатся не цифровые значения, а строки.
Автор: volvo 14.04.2009 20:54
Цитата
В узлах содержатся не цифровые значения, а строки.
Зачем мне эта информация? Хоть записи, какая разница? Что, строки не сравниваются между собой так же, как и числа?
Цитата
Нужно найти указатель на узел, который указывает на current.
И что же ты собрался возвращать, если у тебя искомое значение содержится в root-е? Нет у него предка, что дальше?
Автор: XBugiman 14.04.2009 22:28
Цитата(volvo @ 14.04.2009 16:54)
Зачем мне эта информация? Хоть записи, какая разница? Что, строки не сравниваются между собой так же, как и числа?
И что же ты собрался возвращать, если у тебя искомое значение содержится в root-е? Нет у него предка, что дальше?
Нужно сравнивать не строки, а условие, что искомый! указатель указывает на узел current, нужно вернуть этот указатель. Он в дереве по умолчанию присутствует
Автор: volvo 15.04.2009 15:15
В Турбо Паскале над указателями не определены никакие операции, кроме сравнения с nil. То есть, тебе надо пройти по дереву, КАЖДЫЙ указатель преобразовать к виду, в котором его можно сравнить с другим указателем (я надеюсь, ты в курсе, что $83DF:$000B и $7FFD:$400B указывают на одну и ту же ячейку памяти, хотя как видишь, сами значения сегментной части и смещений у них совершенно разные), и сравнить с приведенным к тому же виду current... То есть, что-то вроде:
function findptr(root: ttree; curr: ttree): ttree; var p: ttree; begin if root = nil then findptr := nil else if (convert(root^.left) = convert(curr)) or (convert(root^.right) = convert(curr)) then findptr := root else begin p := findptr(root^.left, curr); if p = nil then p := findptr(root^.right, curr); findptr := p; end; end;
Функцию Convert попробуй написать сам...
Автор: passat 15.04.2009 19:11
Цитата(XBugiman @ 14.04.2009 19:28)
Нужно сравнивать не строки, а условие, что искомый! указатель указывает на узел current, нужно вернуть этот указатель. Он в дереве по умолчанию присутствует
Не слишком ли Вы завернули задание? Узел current при любом раскладе обязан содержать ключ. Какправило, ключ уникален. Исходя из такой постановки, надо пройти по дереву и найти родителя искомого узла. Поиск самый что ни есть обыкновенный по ключу. А что там является ключом - числа, строки или бегемоты - не имеет ни малейшего значения.
Автор: XBugiman 26.04.2009 18:45
Да вообще то думаю не слишком. Алгоритм применяется в Делфи, поэтому соот-но функции conv() ни к чему. Само задание, сделать игру 20 вопросов. А конкретно этот кусок алгоритма используется для определения вопроса на который пользователь ответил неверно, и требуется ввести новый вопрос и объект. Думаю стоит создать отдельную тему в разделе Делфи.