Zad. 10 (3 III 2004, zadanie za 4 punkty, termin 15.III.2004) Drzewo binarne liczb całkowitych będziemy zapisywali jako jeden wiersz w pliku tekstowym stosując nastepujšce reguły: - drzewo puste reprezentujemy znakiem _ - reprezentacja drzewa niepustego rozpoczyna się od znaku ^ po którym umieszczamy wartość pamiętaną w korzeniu drzewa, a następnie pojedynczą spację i reprezentację lewego i prawego poddrzewa. W wierszu opisującym drzewo nie może być znaków innych niż wymienione powyżej. Przyjmując nastepujące definicje: type drzewo = ^ elem; elem = record v: integer; lewy, prawy : drzewo; wysokosc : integer; { wysokość drzewa } niskosc : integer; { niskość to 1 + minimum z niskości poddrzew, dla drzewa pustego wysokość = niskość = 0 } end; Zdefiniuj: function wczytajDrzewo(var f:text):drzewo; wczytującą drzewo z pliku tekstowego procedure wypiszDrzewo(var g:text;d:drzewo); wypisującą tekstową reprezentację drzewa do pliku function usunLisc(var d:drzewo): drzewo; usuwającą z drzewa najgłębszy liść i przekazującą w wyniku wskaźnik do niego (nie zwalniamy pamięci!) procedure wstawLisc (var d: drzewo; l: drzewo); wstawiającą do drzewa d liść wskazywany przez l na wolne miejsce najbliższe korzenia Napisz program, który zostanie wywołany z dwiema nazwami plików i który: - wczyta reprezentację drzewa z pierwszego pliku, - tak długo jak długo różnica między wysokościa a niskościa drzewa przekracza 1 przeniesie najgłębszy liść na miejsce najbliższe korzenia; po każdym takim kroku powstałe drzewo ma zostać wypisane w nowym wierszu pliku o nazwie podanej jako drugi parametr, - zwolni przydzieloną pamięć (jak zwykle wypisujemy jej stan przed utworzeniem struktury, po jej utworzeniu i po zwolnieniu pamięci). Przykładowa reprezentacja drzewa: ^10 ^20 ^30 __^40 __^50 _^60 __ Program nie musi badać poprawności pliku danych.