29.Prednaska/Cvicenie0

Z Pascal
Prejsť na: navigácia, hľadanie

29. Cvičenie


< 29.Prednáška | riešené úlohy


Rozcvička

1. binárny strom je definovaný

TStrom = class
  Info: Integer;
  L, P: TStrom;
  • napísať metódu TStrom.Urob, ktorá upraví hodnoty vo vrcholoch (Info) stromu takto:
  • vo všetkých listoch bude hodnota 1
  • vo vnútorných listoch bude hodnota, ktorá je maximálna z hodnôt jeho synov zvýšené o 1 (alebo súčtom synov)


Cvičenie

  • BVS
type
  TBVS = class
    Koren: TVrchol;
  end;
  • ručne vytvoriť, ak postupne pridávame: 6, 2, 4, 7, 3, 9, 5, 8, 1
  • pridať 6.5, 1.5, 5.5
  • rozchodiť aplikáciu z prednášky a vytvoriť v nej uvedený strom
  • nájsť minimálny vrchol stromu
function TBVS.Min: Integer;
begin
 Result := koren;
	if Result <> nil then
		while Result.L <> Result do
			Result :=  Result.L;
end;
na vykreslenie minima treba mať v TForm1.Kresli podporu
všimnite si, že počet krokov while cyklu bude maximálne hĺbka stromu
var
	M: TVrchol;
begin
	M := Strom.min;
	if M <> nil then
		Image1.Canvas.TextOut(0, 0, 'min = ' + M.Text)
end;
  • verzia Vloz s dynamickým poľom ako parametrom
function TVBStrom.Vloz(Hodnota: array of Integer)
var
	h: Integer;
begin
	for h in Hodnota do
		Vloz(h);
end;
otestujeme
begin
Strom.Vloz([6, 2, 4, 7, 3, 9, 5, 8, 1])
	Vloz(h);
end;
  • ručne vyhadzovať vrchol zo stromu
ak má dvoch synov, minimum pravého podstromu sa presťahuje do vrcholu + potrebné upratovanie
lepšie robiť na košatejšom strome
  • ako vyzerá Preorder a Inorder výpis
  • metódy - rekurzívne aj nerekurzívne
function TBVS.Max: Integer;
function Hladaj(Hodnota: Integer): TVrchol;


  • aritmetické stromy


  • lexikografické stromy



ďalšie námety



Domáca úloha

1.