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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2018, 07:53   #1
Раиса17
 
Регистрация: 12.06.2018
Сообщений: 6
По умолчанию Работа с деревом в Паскаль

Задание: По заданному сбалансированному бинарному дереву, элементами которого являются случайные целые числа, создать сбалансированное бинарное дерево, в котором значения вершин будут противоположны по знаку. Предусмотреть вывод содержимого вершин построенных деревьев.

Можно ли для основы использовать этот код? Есть некоторые функции и он пока только задает значениям дерева случайные числа.
И как до конца выполнить задание?
Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils, crt32, Windows;

type
PNode=^Node; 
 Node=record 
   data:integer;
   left,right:PNode; 
end;

var
  Tree,p1:PNode; 
  n,x,i:integer;
  ch:char; 


procedure AddToTree (var Tree:PNode;x:integer); 
begin
 if Tree=nil then  
   begin
     New(Tree);  
     Tree^.data:=x;    
     Tree^.left:=nil;    
     Tree^.right:=nil;  
      exit;
   end;
 if x < Tree^.data then   
     AddToTree(Tree^.left,x)  
  else
    AddToTree(Tree^.right,x);  
end;
 

function Search(Tree:PNode;x:integer):PNode; 
var
p:PNode;   
begin
  if Tree=nil then   
     begin
       Search:=nil;  
       exit; 
     end;
  if x=Tree^.data then  
    p:=Tree  
     else   
       if x < Tree^.data then 
          p:=Search(Tree^.left,x) 
       else     
         p:=Search(Tree^.right,x);  
  Search:=p; 
end;
 

procedure Lkp(Tree:PNode);
begin
  if Tree=nil then  
   exit;      
  Lkp(Tree^.left);  
  write('  ',Tree^.data); 
  Lkp(Tree^.right);  
end;
 

procedure DeleteTree(var Tree1:PNode );
begin
        if Tree1 <> nil then
          begin
            DeleteTree (Tree1^.LEFT);
            DeleteTree (Tree1^.RIGHT);
            Dispose(Tree1);
          end;
end;

begin
  { TODO -oUser -cConsole Main : Insert code here }

  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);

   Tree:=nil;
    writeln(' kolv elementov');
    readln(n);
     for i:=1 to n do
       begin
         x:=random(15);
         AddToTree(Tree,x);
       end;
    writeln('Само дерево');
    Lkp(Tree);
    writeln;
   DeleteTree(Tree);
   readln;

end.
Раиса17 вне форума Ответить с цитированием
Старый 15.12.2018, 12:33   #2
CMY_3
Пользователь
 
Регистрация: 24.02.2016
Сообщений: 38
По умолчанию

Цитата:
Сообщение от Раиса17 Посмотреть сообщение
создать сбалансированное бинарное дерево
если это дерево не должно при этом оставаться деревом поиска, то это проще и можно сделать, а если же нужно дерево поиска, то есть АВЛ-дерево, то тут надо подзапариться или использовать стандартную библиотеку fpc
Код:
program avltreee;
uses
  AVL_Tree;
type pInt = ^integer;
var
  t, t1 : TAVLTree;
  nd, nd1 : TAVLTreeNode;
  i, n : integer;
begin
  randomize;
  t := TAVLTree.Create;
  write('n = '); readln(n);
  for i := 1 to n do begin
    nd := TAVLTReeNode.Create;
    GetMem(nd.Data,SizeOf(pInt));
    pInt(nd.Data)^ := random(150) - 50;
    t.Add(nd);
  end;
  writeln;
  writeln(' source tree, infix order(LKP):');
  for nd in t do write(pInt(nd.Data)^,' ');

  writeln;
  t1 := TAVLTree.Create;
  for nd in t do begin
    nd1 := TAVLTreeNode.Create;
    GetMem(nd1.Data,SizeOf(pInt));
    pInt(nd1.Data)^:=-(pInt(nd.Data)^);
    t1.Add(nd1);
  end;
  writeln(' tree, infix order(LKP):');
  for nd1 in t1 do write(pInt(nd1.Data)^,' ');
  readln;
end.
CMY_3 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с деревом Jstree Елена_05 JavaScript, Ajax 0 10.01.2014 10:58
Си работа с деревом Осип Помощь студентам 0 29.05.2012 17:10
Работа с деревом oooooo111 Общие вопросы Delphi 1 30.04.2011 01:21
Работа с деревом C# Мария_С. Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 0 18.04.2011 20:13
Работа с деревом. Gon Паскаль, Turbo Pascal, PascalABC.NET 1 18.01.2009 20:24