Y, X, X, X Y.
, , , .
, D, E B; H, I, J .
, . Record, , , Integer:
Type
PTree = ^TTree;
TTree = Record
Data : Integer;
Left, Right : PTree;
end;
:
Var
Tree : PTree;
:
;
;
.
.
, . , , , . .
. . , nil. , nil. , , . ANode nil, , .
Procedure InsTree(var ANode : PTree; n : lnteger);
Begin
if ANode = nil then
Begin
new(ANode);
With ANode^ do
Begin
Left := nil;
Right := nil;
Data := n;
end;
end
else if n< ANode^.Data then InsTree(ANode^.Left, n) else InsTree(ANode^.Right, n);
End;
.
. . . , :
, ;
;
.
. :
( );
( );
( ).
:
Procedure PrintTree(ANode : PTree);
Begin
if ANode <> nil then
Begin
PrintTree(ANode^.Left);
WriteLn(ANode^.Data);
PrintTree(ANode^.Right)
End;
End;
. : Tree PTree ; Digit Integer .
Var
Tree : PTree;
Digit : Integer;
BEGIN { }
Writeln( 0);
Tree := nil;
Read(Digit);
While Digit<>0 Do
Begin
InsTree(Tree,Digit);
Write( : );
ReadLn(Digit);
End;
PrintTree(Tree);
END.
.
, :
:
.
, , . , . .
:
Type
PTree = ^TTree;
TTree = Record
Data : Integer;
Left, Right : PTree;
end;
Var
Tree : PTree;
Tree Data=x.
DeleteNode :
1. , , .
2. .
3. .
Procedure DeleteNode(x : Integer; var ANode : PTree);
Var q : PTree;
Procedure Del(var R : PTree);
Begin
if R^.Right <> nil then Del(R.^Right)
else
begin
q^.Data := R^.Data;
q := R;
R := R^.Left;
Dispose(q);
end;
End; { Del }
egin { DeleteTree }
if ANode = nil then Writeln( ,x, )
else
if x < ANode^.Data then DeleteNode(x,ANode^.Left)
else if x > ANode^.Data then DeleteNode(x,ANode^.Right)
else
begin
q := ANode;
if q^.Right = nil then
Begin
ANode := q^.Left;
Dispose(q);
end
else
if q^.Left = nil then
begin
ANode := q^.Right;
Dispose(q);
end
else Del(q^.Left);
end;
End;
Del . q^ ( Data) q^ R^ , R^ .
(), 13, 15, 5, 10. . b e.