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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2008, 23:51   #1
WhyBeNormal
Пользователь
 
Регистрация: 25.11.2008
Сообщений: 11
По умолчанию Задача про деревья.

задача.
написать программу, которая проверяет, является ли двоичное дерево деревом поиска.
Код:
type 
tipelemderev = integer;
derevo = ^vershina;
vershina = record
elem: tipelemederev;
lev,prav: derevo
end;
...
var E : tipelemderev;
...
у меня есть процедура проверки дерева на его "поисковость"
Код:
function CheckLeft(p : Node; num : integer) : boolean;
begin
CheckLeft := true;
if p <> nil then begin
if p^.n > num then CheckLeft := false
else if not CheckLeft(p^.left, num) then CheckLeft := false
else if not CheckLeft(p^.right, num) then CheckLeft := false
end
end;

function CheckRight(p : Node; num : integer) : boolean;
begin
CheckRight := true;
if p <> nil then begin
if p^.n < num then CheckRight := false
else if not CheckRight(p^.left, num) then CheckRight := false
else if not CheckRight(p^.right, num) then CheckRight := false
end
end;

function Check(p: Node) : boolean;
begin
Check := true;
if p <> nil then begin
if not CheckLeft(p^.left, p^.n) then Check := false
else if not CheckRight(p^.right, p^.n) then Check := false
else if not Check(p^.left) then Check := false
else if not Check(p^.right) then Check := false
end;
А, да, еще нужно вставить туда проверку на вводимые данные(ну чтоб не повторялись ключи или там чтоб при вводе чисел лежащих вне интеджер(-32768 .. 32767 (вроде такие границы) ) будет вылетать ошибка, или там чтоб букву нельзя было ввести. Собственно почему я прошу о помощи: я хз как мне сделать так, чтоб вводилось просто дерево ... вот чтоб я вводил допустим числа, а прога по какой-то системе распределяла бы эти числа по узлам. Например там прога говорит, введите значит числа через пробел, при этом 1е число - ключ корня, 2е - ключ левого узла от корня, 3е - правый узел от корня, 4е - левый узел от левого узла корня, 5е - правый узел от левого узла корня, 6е - левый узел от правого узла 7е - правый узел от правого узла, 8е - левый узел от левого узла от левого узла корня ... ну и т.д . Например введу я 3245. У меня получится так: корень это 3, левый узел - это 2, правый узел это 4, левый узел левого узла это 5.
3
/ \
2 4
/
5

В общем я хз... уже месяц с этой задачей бьюсь
СПАСАЙТЕ, ПЛИЗ

Последний раз редактировалось WhyBeNormal; 22.12.2008 в 00:05.
WhyBeNormal вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача про 3 прямые meds Паскаль, Turbo Pascal, PascalABC.NET 5 17.11.2008 12:24
Задача про треугольник YO$YA Помощь студентам 10 15.11.2008 20:29
Задача про массив xakkkkker Помощь студентам 2 02.11.2008 10:49
Задача про близнецов stscolt Помощь студентам 2 21.04.2008 22:52
Задача про переключатели Night Помощь студентам 5 21.01.2007 18:15