{Chuong trinh duoi day toi da test chay tot roi}
Type Arr= Array[1..50] of Integer;
Link = ^node;
node = Record
Value:Integer;
l,r:link
End;
{Inoder}
{Truong hop co de qui}
Procedure Inorder(Node : Link);
Begin
if Node<>nil then
Begin
inorder(node^.l);
Write(node^.value,' ');
inorder(node^.r);
End;
End;
{Truong hop khong de qui}
Procedure Inorder_NonRecursion(Node : Link);
Label 1,2,3;
Var STN : Array[1..50] of Link;
Top,Addr_Return : Integer;
STADDR : Arr;
Begin
Top:=0;
1: if Node=nil then goto 3;
Inc(Top);
STN[Top]:=Node;
STADDR[Top]:=2;
Node:=Node^.L;
Goto 1;
2: Write(node^.value,' ');
Inc(Top);
STN[Top]:=Node;
STADDR[Top]:=3;
Node:=Node^.r;
Goto 1;
3: If Top<>0 then
Begin
Node:=STN[Top];
Addr_Return:=STADDR[Top];
Dec(Top);
If Addr_Return=2 then goto 2
Else goto 3;
End;
End;
{Postorder}
{Truong ho co su dung de qui}
Procedure Postorder(Node : Link);
Begin
if Node<>nil then
Begin
Postorder(node^.l);
Postorder(node^.r);
Write(node^.value,' ');
End;
End;
{Truong hop khong de qui}
Procedure Postorder_NonRecursion(Node : Link);
Label 1,2,3;
Var STN : Array[1..50] of Link;
Top,Addr_Return : Integer;
STADDR : Arr;
Begin
Top:=0;
1: if Node=nil then goto 3;
Inc(Top);
STN[Top]:=Node;
STADDR[Top]:=2;
Node:=Node^.L;
Goto 1;
2: Inc(Top);
STN[Top]:=Node;
STADDR[Top]:=3;
Node:=Node^.r;
Goto 1;
3: If Node<>nil then Write(Node^.value,' ');
If Top<>0 then
Begin
Node:=STN[Top];
Addr_Return:=STADDR[Top];
Dec(Top);
If Addr_Return=2 then goto 2
Else goto 3;
End;
End;
Bookmarks