type TElem = integer;
PNode = ^TNode;
TNode = record
data:TElem
prev:PNode
next:PNode
end;
TList = record
head:PNode;
tail:PNode;
end;
procedure BSTtoDLL(root:PNode;var L:TList);
begin
if root <> NIL then
begin
BSTtoDLL(root^.next,L);
root^.next := L.head;
if L.head <> NIL then
L.head^.prev := root;
L.head := root;
BSTtoDLL(root^.prev,L);
end;
end;
- Ostatnie wywołanie wygląda na ogonowe i prawdopodobnie da się zamienić na iterację
ale co z pierwszym ?
Na co je zamienić aby algorytm miał złożoność czasową O(n) - Tak napisana procedura prawdopodobnie nie ustawi ogona
Jak to zmodyfikować