Program tree4; Uses Crt; const MaxNode = 255; Type TTree = record Head,L,R: Byte; Date: string[20]; jiv: boolean; End; Var Tree: array [0..MaxNode] of TTree; flag: Boolean; node: integer; Strq, Strj: string; F: file of TTree; i: byte; MasSv, MasJiv: array [0..20] of string [20]; Procedure NewNodeL(Node: Byte; str:string; b:Boolean); Begin Tree[Node].L := Tree[0].Head + 1; Tree[0].Head := Tree[0].Head + 1; Tree[Tree[0].Head].Head := Node; Tree[Tree[0].Head].Date := str; Tree[Tree[0].Head].L := 0; Tree[Tree[0].Head].R := 0; Tree[Tree[0].Head].jiv := b; End; Procedure NewNodeR(node: byte; str:string; b:Boolean); var s:string; Begin if Tree[Node].jiv then Begin NewNodeL(Node,strJ,True); s := Tree[Node].Date; Tree[Node].Date := Str; Tree[Node].jiv := False; {inc(node);} NewNodeR(Node, s,True); End Else Begin Tree[Node].R := Tree[0].Head + 1; Tree[0].head := Tree[0].Head + 1; Tree[Tree[0].Head].Head := Node; Tree[Tree[0].Head].Date := str; Tree[Tree[0].Head].L := 0; Tree[Tree[0].Head].R := 0; Tree[Tree[0].Head].jiv := b; if Not(b) then NewNodeL(Tree[0].Head,StrJ,True); End; End; {Function FindJiv(n: byte):Boolean; var i:byte; Begin FindJiv := False; for i:=0 to MasSv[0] do if Tree[n].Date = MasSv[i] Then Find := True; End; Procedure PreOrder(n: byte; k: byte); Begin if FindJiv(n) then inc(k); if Tree[n].L <> 0 then PreOrder(Tree[n].L, k); If Tree[n].L <> 0 then PreOrder(Tree[n].R, k); If k <> 0 then MasJiv[k] := Tree[n].Date; End; } Begin Assign(f,'/Tree.dat'); {$i-} Reset(f); {$i+} if IOResult = 0 then Begin i:=0; While Not EOF(f) do Begin Read(f, Tree[i]); inc(i); End; End Else Begin Tree[0].Head := 0; NewNodeL(0,'gavkaet',False); NewNodeL(1,'Sobaka',True); End; ClrScr; WriteLn('Zagodaite jivotnoe!'); Flag := True; Node := 1; While Flag do Begin WriteLn(Tree[Node].Date); WriteLn('1-Yes, 2-No, 3-Exit, 4-Save'); Case ReadKey of '1': if Tree[Node].jiv = True Then Begin WriteLn('UGODAL!!!'); WriteLn(''); Node := 1; End Else Node := Tree[Node].L; '2': if Tree[Node].R = 0 then Begin WriteLN('kakoejivotnoe vi zagadali?'); ReadLn(StrJ); WriteLN('chem otlichaetsa ot sobaki?'); ReadLn(StrQ); NewNodeR(node,StrQ,False); node:=1; WriteLn('ZAPOMNIL'); WriteLN(''); End Else Node := Tree[Node].R; '3': Flag := False; '4': Begin Assign(f,'/Tree.dat'); ReWrite(f); For i:=0 to Tree[0].Head do Write(f, Tree[i]); Close(f); End; End; End; End.