1) корректируешь функцию Leaves так, чтобы она не эмулировала стек, а его использовала:
function Leaves(t: ttree): integer; var s: TStack; sp, counter: integer; begin Stack_Init(s); counter := 0; repeat while t <> nil do begin Stack_Push(s, t); t := t^.left; end; if s = nil then begin Leaves := counter; exit; end; t := Stack_Pop(s); if (T^.right = nil) and (T^.left = nil) then inc(counter); t := t^.right; until false; end;
2) подключаешь к модулю TreeUnit два модуля: Types и Stack, и к модулю Stack подключаешь Types. 3) описываешь правильный тип поля данных в стеке: он должен хранить не целые числа, а указатель на дерево: