type
TTree = ^TNode;
TNode = record
Data: TData;
Left, Right: TTree;
LFlag, RFlag: Boolean
end;
procedure PrevOrd(Tree: TTree;
var PrevNode: TTree);
begin
if Tree=nil then
Exit;
if Tree^.Left=nil then
begin
Tree^.LFlag:=True;
Tree^.Left:=PrevNode
end
else
Tree^.LFlag:=False;
if PrevNode<>nil then
begin
if PrevNode^.Right=nil then
begin
PrevNode^.Right:=Tree;
PrevNode^.RFlag:=True
end
else
PrevNode^.RFlag:=False
end;
PrevNode:=Tree;
PrevOrd(Tree^.Left, PrevNode);
PrevOrd(Tree^.Right, PrevNode)
end;
LFlag=True表示Left指向前驱
LFlag=False表示Left指向左孩子。
右侧雷同。