Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Бинарные деревья

Автор: zmt 29.11.2006 20:21

Привет, ребята!
Совсем замучилась с двумя задачами.
1) описать процедуру, проверяющую на равенство два дерева (деревья равны, если ключи и записи вершин одного дерева соответственно равны ключам и вершинам второго);
2) на стоянке стоят автобомили с номерами 1212,3451,7694,4512,4352,8732,7326,2350,4536,2387,5746,6776,4316,1324; для сатистики нужно составить список автомобилей с такими номерами, что сумма двух первых цифр равна сумме двух послдних, так, чтобы каждый следующий номер был меньше предыдущего (нужно воспользоваться деревом бинарного поиска).

Знаю, что надо было попробовать решать самой, но преподавателем совершенно не были освещены эти темы blink.gif Могу только проводить над деревьями простейшие операции, а в этом полный ноль...

Plz, помогите rolleyes.gif
Заранее спасибо.

Автор: volvo 29.11.2006 21:20

Цитата
описать процедуру, проверяющую на равенство два дерева
Процедуру? Функцию я делал вот тут:
http://forum.pascal.net.ru/index.php?s=&showtopic=4375&view=findpost&p=37411

Процедуру - не вижу смысла, результат возвращать все равно надо...

Автор: zmt 30.11.2006 2:07

Volvo, спасибо!
Теперь надо попробовать убедить препода в том, что тут удобнее работать с функцией... Слишком уж она упрямая...

Автор: volvo 30.11.2006 2:18

Цитата
надо попробовать убедить препода в том, что тут удобнее работать с функцией
Не будет убеждаться - сделай процедурой smile.gif
procedure isEqual(var equal: boolean; p1, p2: ttree);
var b_left, b_right: boolean;
begin
if (p1 = nil) and (p2 = nil) then equal := true
else if (p1<>nil) and (p2<>nil)
then begin
isEqual(b_left, p1^.left, p2^.left);
isEqual(b_right, p1^.right, p2^.right);
equal := (p1^.data = p2^.data) and b_left and b_right
end
else equal := false
end;

Автор: zmt 30.11.2006 19:10

Volvo, ещё раз спасибо smile.gif