Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
10
Добавлен:
01.05.2014
Размер:
7 Кб
Скачать
unit Derevo2;
INTERFACE



uses crt;
const
ForLen = 50;
NilT = nil;
type
Tree = ^tNode;
Forest = array [1..ForLen] of Tree; {«Ґб}
Elem = char;              	{ЇаҐ¤бв ў«Ґ­ЁҐ ЎЁ­ а­®Ј® ¤ҐаҐў }
		{вЁЇ Elem ®ЇЁб ­ ў GlobalT}
tNode = record            		{г§Ґ«:}
Info: Elem; 	{  ᮤҐа¦Ё¬®Ґ}
Sub1: Tree;
Sub2: Tree;
Sub3: Tree;
Sub4: Tree;
Sub5: Tree;
end {Node};

var
st1: string;
i1,y1,lenght1:integer;
t,tt:text;

procedure Otkaz (n: Byte); {б®®ЎйҐ­Ёп ®Ў ®иЁЎЄ е}
function CreateT: Tree;   {б®§¤ ­ЁҐ Ѓ„}
function NullT (t: Tree): Boolean;    {Їа®ўҐаЄ  Їгбв® «Ё „Ѓ}
function RootT (t: Tree): Elem;       {§­ з ­ЁҐ Є®а­п Ѓ„}
function T1 (t: Tree): Tree;
function T2 (t: Tree): Tree;
function T3 (t: Tree): Tree;
function T4 (t: Tree): Tree;
function T5 (t: Tree): Tree;
function Cons_T (e: Elem; L1,L2,L3,L4,L5: Tree): Tree;  {Є®­бвагЄв®а ¤ҐаҐў }
procedure DestroyT (var b: Tree); {г¤ «Ґ­ЁҐ ¤ҐаҐў }
procedure WriteT (D : Tree);      {ўлў®¤ ¤ҐаҐў  ў бЄ®Ў ЇаҐ¤бв ў«Ґ­ЁЁ ­  нЄа ­}
procedure WriteT1 (D : Tree;var tt:text);     {ўлў®¤ ¤ҐаҐў  ў бЄ®Ў ЇаҐ¤бв ў«Ґ­ЁЁ ў д ©«}
function EnterT(s:string) : Tree;              {ўў®¤ ¤ҐаҐў  Ё§ д ©« }
procedure  DisplayT1 (b: Tree; n,l: integer);          {ўлў®¤ ЇҐаҐў Ё§®Ўа ¤ҐаҐў  ­  нЄа ­}
procedure  DisplayT2 (b: Tree; n,l: integer;var  tt:text);          {ўлў®¤ ЇҐаҐў Ё§®Ўа ¤ҐаҐў  ­  нЄа ­}

procedure CreateForest(var F : forest);        {б®§¤ ­ЁҐ «Ґб }
procedure Listin(T : Tree; var  F:forest);     {ў®§ўа й Ґв «Ґб Ї®¤¤ҐаҐўмҐў ¤ҐаҐў }
procedure Tail(T : Tree; var F,F1 : forest );   {ў®§ўа § Ґв «Ґб ¤ҐаҐў  ЎҐ§ Ј®«®ўл}
function Head (F : forest):Tree;                 {ў®§ўа й Ґв Ј®«®ў­®Ґ ¤ҐаҐў® «Ґб }
function NullF(F:forest):boolean;                {Їа®ўҐаЄ  Їгбв «Ё «Ґб}

{  ---------------------------------------------------------------------------------}

IMPLEMENTATION
procedure Otkaz (n: Byte);
begin
 Case n of
  1: Write ('Ћ’ЉЂ‡: RootT (Null_Bin_Tree)!');
  2: Write ('Ћ’ЉЂ‡: LeftT (Null_Bin_Tree)!');
  3: Write ('Ћ’ЉЂ‡: RightT (Null_Bin_Tree)!');
  4: Write ('Ћ’ЉЂ‡: ЁбзҐаЇ ­  Ї ¬пвм!')
  else  Write ('Ћ’ЉЂ‡: ?')
 end;
 Halt
end {Otkaz};


function CreateT: Tree;
begin
  CreateT := nil
end {CreateT};

function NullT (t: Tree): Boolean;
begin
  NullT := (t = nil)
end {NullT};

function RootT (t: Tree): Elem;
begin
 if t <> nil then RootT := t^.Info else Otkaz(1)
end {RootT};

function T1 (t: Tree): Tree;
begin
  if t <> nil then T1 := t^.Sub1 else Otkaz(2)
end {T1};

function T2 (t: Tree): Tree;
begin
  if t <> nil then T2 := t^.Sub2 else Otkaz(2)
end {T2};

function T3 (t: Tree): Tree;
begin
  if t <> nil then T3 := t^.Sub3 else Otkaz(2)
end {T3};

function T4 (t: Tree): Tree;
begin
  if t <> nil then T4 := t^.Sub4 else Otkaz(2)
end {T4};

function T5 (t: Tree): Tree;
begin
  if t <> nil then T5 := t^.Sub5 else Otkaz(2)
end {T5};



function Cons_T (e: Elem; L1, L2, L3, L4, L5: Tree): Tree;
 var b: Tree;
begin
  if MaxAvail >= SizeOf (tNode) then
   begin
    New (b);
    b^.Info:= e;
    b^.Sub1:= L1;
    b^.Sub2:= L2;
    b^.Sub3:= L3;
    b^.Sub4:= L4;
    b^.Sub5:= L5;
    Cons_T:= b
   end
  else 
    Otkaz(4)
end {Cons_T};

procedure DestroyT(var b: Tree);
begin
 if b <> nil then
   begin
     DestroyT (b^.Sub1);
     DestroyT (b^.Sub2);
     DestroyT (b^.Sub3);
     DestroyT (b^.Sub4);
     DestroyT (b^.Sub5);
     Dispose (b)
   end
end {DestroyT};


procedure WriteT (D : Tree);
begin
  write('(');
  write(rootT(D));
  if (T1(D) <> nil) then WriteT(T1(D));
  if (T2(D) <> nil) then WriteT(T2(D));
  if (T3(D) <> nil) then WriteT(T3(D));
  if (T4(D) <> nil) then WriteT(T4(D));
  if (T5(D) <> nil) then WriteT(T5(D));
  write(')');
end;

procedure WriteT1 (D : Tree;var tt:text);
begin
  write(tt,'(');
  write(tt,rootT(D));
  if (T1(D) <> nil) then WriteT1(T1(D),tt);
  if (T2(D) <> nil) then WriteT1(T2(D),tt);
  if (T3(D) <> nil) then WriteT1(T3(D),tt);
  if (T4(D) <> nil) then WriteT1(T4(D),tt);
  if (T5(D) <> nil) then WriteT1(T5(D),tt);
  write(tt,')');
end;


function EnterT(s:string) : Tree;
var ll:integer;
rrr:tree;



function EntT : Tree;
var
c,temp : char;
begin
  c := s[ll]; inc(ll);
 {  write(c); readkey;   }
  if (c = '(') then
    begin
      c := s[ll]; inc(ll);
    end;
    {write(c); readkey;}
       if (c = ')')  then
        begin
          EntT := nil;
          ll := ll -1
        end else
    begin
      EntT := Cons_T(c,EntT,EntT,EntT,EntT,EntT);
      c := s[ll]; inc(ll);
    end;
end;
begin
ll:=1;
rrr:=entt;
entert := rrr;
end;


procedure  DisplayT1 (b: Tree; n,l: integer);
{ўлў®¤ Ї®бва®з­®Ј® Ё Ї®ўҐа­гв®Ј® Ё§®Ўа ¦Ґ­Ёп ЎЁ­ а­®Ј® ¤ҐаҐў  ЎҐ§ ў®§ўа в  Є аҐвЄЁ}
{n га®ўҐ­м г§« }
var i,j,k,r: integer;
begin
k:=1;
r:=1;
for j:=1 to n do k:=k+1;
k:=k+l;
	if NullT (b) then  {Writeln}
		else
			begin

                        for i:=1 to k do write(' ');
				Write ({' ',} RootT (b)); writeln;

                                DisplayT1(T1(b),n+1,k);
                                DisplayT1(T2(b),n+1,k);
                                DisplayT1(T3(b),n+1,k);
                                DisplayT1(T4(b),n+1,k);
                                DisplayT1(T5(b),n+1,k);
                                {writeln;}
              		end;
 end; {DisplayBT1}


procedure  DisplayT2 (b: Tree; n,l: integer;var  tt:text);
{ўлў®¤ Ї®бва®з­®Ј® Ё Ї®ўҐа­гв®Ј® Ё§®Ўа ¦Ґ­Ёп ЎЁ­ а­®Ј® ¤ҐаҐў  ЎҐ§ ў®§ўа в  Є аҐвЄЁ}
{n га®ўҐ­м г§« }
var i,j,k,r: integer;
begin
k:=1;
r:=1;
for j:=1 to n do k:=k+1;
k:=k+l;
	if NullT (b) then  {Writeln}
		else
			begin

                        for i:=1 to k do write(tt,' ');
				Write (tt,RootT(b)); writeln(tt);
                                DisplayT2(T1(b),n+1,k,tt);
                                DisplayT2(T2(b),n+1,k,tt);
                                DisplayT2(T3(b),n+1,k,tt);
                                DisplayT2(T4(b),n+1,k,tt);
                                DisplayT2(T5(b),n+1,k,tt);
                                {writeln;}
              		end;
 end; {DisplayBT1}



procedure CreateForest(var F : forest);
var t : integer;
begin
  for t := 1 to ForLen do F[t] := nil;
end;

procedure Listin(T : Tree; var  F:forest);
begin
  CreateForest(F);
  F[2] := T2(T);
  F[1] := T1(T);
  F[3] := T3(T);
  F[4] := T4(T);
  F[5] := T5(T);
end; {Listing}

procedure Tail(T : Tree; var F,F1 : forest );
var n : integer;
begin
  CreateForest(F1);
  for n := 1 to ForLen do
    begin
      if (F[n] <> T) then F1[n] := F[n];
    end;
end;

function Head (F : forest):Tree;
var
n : integer;
begin
  n:=1;
  while ( (nullT(F[n])) and (n <= ForLen)) do inc(n);
  if (n=ForLen + 1) then Head := nil else Head := F[n];
end; {Tail}

function NullF(F:forest):boolean;
var n : integer;
begin
  n:=1;
  while ( (nullT(F[n])) and (n <= ForLen)) do inc(n);
  if (n=ForLen + 1) then NullF := true else NullF := false;
end;
end.
Соседние файлы в папке Бинарные деревья