Помощь - Поиск - Пользователи - Календарь
Полная версия: помогите пожалуйста с деревьями
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Rzevsky
Задача звучит так: используя представление дерева, с помощью связных списков написать программу для добавления и удаления листьев дерева.
Пожалуйста помогите, если не трудно.
Amro
Мда деревья это муть полная......я сам трудно врубаюсь......
вот раскопал кое-что, это реализация дерева(т.е как раз добавление элементов) и его вывод, в узлах дерева нах-ся символы, которые добавляются в дерево при помощи сравнения их ASCII кодов

{ вывод на экран вершин дерева /слева направо/ }
       program DisplayTree;
       uses Crt;
       type
         TreePointer = ^tree;
         tree = record
           data: char;
           left: TreePointer;
           right: TreePointer;
           end;
       var
         root, dummy: TreePointer;
         ch:char;

       function STree(root, r:TreePointer; data: char):TreePointer;
       begin
         if r = nil then
         begin
           new®; { получить новую вершину }
           r^.left := nil;
           r^.right := nil;
           r^.data := data;
           if data < root^.data then root^.left := r
           else root^.right := r;
          STree := r;
        end else
        begin
          if data<r^.data then STree := STree(r, r^.left, data)
          else STree := STree(r, r^.right, data)
        end;
       end; { конец процедуры STree }

       procedure PrintTree(r: TreePointer; n: integer);
       var
         i:integer;
       begin
         if r<>nil then begin
            PrintTree(r^.left, n+1);
            for i := 1 to n do Write('   ');
            Writeln(r^.data);
            PrintTree(r^.right, n+1);
          end;
       end; { конец процедуры PrintTree }
       begin
         root := nil;
         repeat
           Write('enter a letter (Q to quit): ');
           ch := ReadKey; Writeln(ch);
           if root= nil then root := STree(root, root, ch)
           else dummy := STree(root, root, ch);
           ch := UpCase(ch);
        until ch ='Q';
       PrintTree(root, 0);
     end.

Rzevsky ИТ 21 Штурмует форум :D АГУ ФоревА :P
Amro
Вот тебе удаление нашёл........это всё из книг, которые выложены на pascal.dax.ru Поскачивай можь чёто полезное и найдешь, для себя.......
Код

{ удаление элемента из дерева }
         function DTree(root:TreePointer;key:char):TreePointer;
         var
           temp,temp2:TreePointer;

        begin
          if root^.data = key then
          begin
            if root^.left=root^.right tnen
            begin
              dispose(root)
              DTree := nil;
            end
            else  if root^.left=nil tnen
            begin
              temp := root^.right
              dispose(root)
              DTree := temp;
            end
            else  if root^.right=nil tnen
            begin
              temp := root^.left
              dispose(root)
              DTree := temp;
            end
            else
            begin  { имеются два листа }
              temp2 := root^.right
              temp := root^.right
              while temp^.left <> nil do temp := temp^.left;
              temp^.left := root^.left
              dispose(root);
              DTree := temp2
            end;
            else
            begin
              if root^.data < key
              then root^.right :=  DTree(root^.right, key)
              else root^.left :=  DTree(root^.left, key)
              DTree := root;
            end;
          end; { конец функции DTree }


С другой стороны Rzevsky нашему господину Б по-моему всё равно, ему лишь бы прога была.....он её даже смотреть мне кажется не будет....................и лабу тебе зачтёт, главное ему её объяснить!!!
Rzevsky а ты лодырь, у тебя ж с паскалем всё хорошо, почему бы самому пару дней не посидеть??? А работа же, тогда понятно!!!!
ОСТОРОЖНЕЕ! не грубить! moderator
Altair
Прошу прощения у посетителей форума, в старом факе была эта тема, я его удалил, а в новый еще не занес...
в присоед. файле модуль для работы с деревьями. Там все операции.
Rzevsky, скоро я все выложу. Готовлю сейчас FAQ.
Rzevsky
Большое спасибо, Amro smile.gif
BlackShadow
Есть ещё такая тема: Composite Template называется. Слышал кто? Мне понравилось...
Atos
Это что-то, связанное с шаблонами?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.