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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2009, 13:42   #1
lebrosha
Пользователь
 
Аватар для lebrosha
 
Регистрация: 21.05.2009
Сообщений: 36
Вопрос Бинарное дерева поиска

Есть бинарное дерево поиска с ифнормацией об автомобилях. В качестве ключа используется номер машины. Нужно вывести весь список авто по возрастанию номеров.
Подскажите как делать! Заранее спасибо.
P.S. ЯП - Pascal
Найди цель, ресурсы найдутся.

Последний раз редактировалось lebrosha; 23.05.2009 в 13:51.
lebrosha вне форума Ответить с цитированием
Старый 23.05.2009, 14:29   #2
lebrosha
Пользователь
 
Аватар для lebrosha
 
Регистрация: 21.05.2009
Сообщений: 36
По умолчанию

ну что никто не подскажет??
Найди цель, ресурсы найдутся.
lebrosha вне форума Ответить с цитированием
Старый 23.05.2009, 14:31   #3
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

А дерево как строится? при помощи алгоритма включения?
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 23.05.2009, 14:50   #4
lebrosha
Пользователь
 
Аватар для lebrosha
 
Регистрация: 21.05.2009
Сообщений: 36
По умолчанию

Вот так строится:
Код:
procedure InsertNode(var root:PTree; info:TTree);
var
  p:PTree;
begin
  If root=NIL then
  begin
    new(root);
    root^.number:=info.number;
    root^.rout:=info.rout;
    root^.output:=info.output;
    root^.repair:=info.repair;
    root^.surname:=info.surname;
    root^.left:=NIL;
    root^.right:=NIL;
  end
  Else
  If info.number>root^.number then
    InsertNode(root^.left,info)
  Else
  If info.number<root^.number then
    InsertNode(root^.right,info);
end;
Найди цель, ресурсы найдутся.

Последний раз редактировалось lebrosha; 23.05.2009 в 14:53.
lebrosha вне форума Ответить с цитированием
Старый 23.05.2009, 14:50   #5
lebrosha
Пользователь
 
Аватар для lebrosha
 
Регистрация: 21.05.2009
Сообщений: 36
По умолчанию

в запись info данные попадают из текстового файла
Найди цель, ресурсы найдутся.

Последний раз редактировалось lebrosha; 23.05.2009 в 14:54.
lebrosha вне форума Ответить с цитированием
Старый 23.05.2009, 15:00   #6
Chudo4258
Форумчанин
 
Аватар для Chudo4258
 
Регистрация: 19.02.2009
Сообщений: 622
По умолчанию

Код:
TYPE 
     U = ^BinTree;
     BinTree = Record
         N:integer; //номер машины
         M:string;  // марка
         L,R : U;
END;

PROCEDURE Ins(Var Tree : U; X : integer; Y:string);      //вставляет элемент в дерево
Begin
   If Tree = Nil
   Then Begin 
	    New(Tree);
	    Tree^.L := Nil;
	    Tree^.R := Nil;
	    Tree^.N:= X;
	    Tree^.M:= Y;
	End
   Else If x < Tree^.N
	Then Ins(Tree^.L, x , y)
	Else Ins(Tree^.R, x, y)
END;

PROCEDURE InsDer(var T:U); //построение дерева
var i,n:integer;
    x:integer;
    y:string;
Begin
  Write('kol-vo el-tov v dereve: ');
  readln(n);
  for i:=1 to n do
  begin
    Write('N: '); Readln(x);
    Write('M: '); Readln(y);
    //x:=-10+Random(21); write(x:5,'   ');
    Ins(T,x,y);
  end;
END;

PROCEDURE PrintTree(T:U);
Begin
 if T<>nil then
             begin
              PrintTree(T^.L);
              Write(T^.N); Writeln('   ', T^.M);
              PrintTree(T^.R);
             end;
END;

var D:U;
begin
 D:=nil;
 InsDer(D);
 PrintTree(D);
readln
end;
Жми на весы!!!

Последний раз редактировалось Chudo4258; 23.05.2009 в 15:15.
Chudo4258 вне форума Ответить с цитированием
Старый 23.05.2009, 15:04   #7
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

ну да это называется алгоритм поиска с включением. После его выполнения данные и так являются отсортированными, теперь ваша задача только их вывести. Для этого нужно воспользоваться обратным обходом дерева. Смысл такой:
procedure obxod(root:Ptree);
begin
if root<>nil then
begin
obxod(root^.left);
write(root^.inf);
obxod(root^.rigth);
end;
end;
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 23.05.2009, 15:27   #8
lebrosha
Пользователь
 
Аватар для lebrosha
 
Регистрация: 21.05.2009
Сообщений: 36
По умолчанию

спасибо, щас попробую
Найди цель, ресурсы найдутся.
lebrosha вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бинарное дерево lubafffka Общие вопросы C/C++ 0 29.04.2009 12:28
Бинарное дерево g0liath Помощь студентам 2 16.02.2008 23:54