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.