Pascal
type
PNode = ^TNode;
TNode = record Value: integer; LeftChild, RightChild: PNode end;
// Это функция, которая находит крайне левый лист в дереве
function FindMostLeftLeaf(ATree: PNode): integer;
begin
repeat
if ATree^.LeftChild <> NIL then
ATree := ATree^.LeftChild
else if ATree^.RightChild <> NIL then
ATree := ATree^.RightChild
else begin
Result := ATree^.Value;
exit;
end;
until False;
end;
// Это функция, которая рекурсивно заполняет дерево размерности Dimension используя стартовое значение AStartValue
function GetTree(ADimension: integer; AStartValue: integer): PNode;
var
I: integer;
TopLevelNode: PNode;
begin
New(Result);
Result^.Value := AStartValue;
Result^.LeftChild := NIL;
Result^.RightChild := NIL;
TopLevelNode := Result;
for I:=1 to ADimension do begin
TopLevelNode^.LeftChild := GetTree(ADimension-1, AStartValue+I);
TopLevelNode^.RightChild := GetTree(ADimension-1, AStartValue+I);
end;
end;
// Это основная функция, которая заполняет дерево и запускает тест
procedure GetTestResults;
var
Tree: PNode;
begin
Tree := GetTree(10, 0);
WriteLn(FindMostLeftLeaf(Tree));
end;
begin
GetTestResults;
end.
Delphi
type
PNode = ^TNode;
TNode = record Value: integer; LeftChild, RightChild: PNode end;
// Это функция, которая находит крайне левый лист в дереве
function FindMostLeftLeaf(ATree: PNode): integer;
begin
repeat
if ATree^.LeftChild <> NIL then
ATree := ATree^.LeftChild
else if ATree^.RightChild <> NIL then
ATree := ATree^.RightChild
else begin
Result := ATree^.Value;
exit;
end;
until False;
end;
// Это функция, которая рекурсивно заполняет дерево размерности Dimension используя стартовое значение AStartValue
function GetTree(ADimension: integer; AStartValue: integer): PNode;
var
I: integer;
TopLevelNode: PNode;
begin
New(Result);
Result^.Value := AStartValue;
Result^.LeftChild := NIL;
Result^.RightChild := NIL;
TopLevelNode := Result;
for I:=1 to ADimension do begin
TopLevelNode^.LeftChild := GetTree(ADimension-1, AStartValue+I);
TopLevelNode^.RightChild := GetTree(ADimension-1, AStartValue+I);
end;
end;
// Это основная функция, которая заполняет дерево и запускает тест
procedure GetTestResults;
var
Tree: PNode;
begin
Tree := GetTree(10, 0);
WriteLn(FindMostLeftLeaf(Tree));
end;
begin
GetTestResults;
end.