1) Węzły drzewa binarnego są zadeklarowane jako: struct drzewo { struct drzewo * lewe; struct drzewo * prawe; int wartosc; }; Napisać w C funkcję która realizuje "funkcjonalne" wstawianie do tego drzewa. Funkcjonalne oznacza tu że oryginalne drzewo ma pozostać nie zmienione, zaś funkcja ma utworzyć potrzebne węzły tworząc z nich nowe drzewo (którego wieksza część jest wspólna ze starym). 2) Przypominam że procedura daj_symbol (zdefiniowan niżej) powala wczytać jedną wartość w Pop11: vars itemrep; incharitem(charin) -> itemrep; ;;; Bieżący symbol vars sym; define daj_sym(); itemrep() -> sym; enddefine; Napisać procedurę rekursywną (analizator syntaktyczny) ktora wczyta listę. Ta procedura ma specjalnie traktować nawiasy klamrowe (jako ograniczniki listy), pozostałe wartości umiaszczjąc bezpośrednio na liście. Uwaga: obsłużyć zagnieżdżone listy! 3) Drzewo wielokrotnie rozgałęzione jest zrealizowane jako lista list. Każdy element listy ma albo wartość całkowitoliczbową, albo jego wartość jest poddrzewem (tzn. listą). Napisać funkcję (procedurę) która przekształci drzewo (a właściwie stworzy nowe, w razie potrzeby kopiując węzły tak by nie zmienić starego) tak by pierwszy element każdej listy nowego drzewa miał wartość zero o ile pierwszy element odpowiedniej listy oryginalnego drzewa był parzysty (i w szczególności był liczbą). Pozostałe listy kopiujemy (rekursywnie przetwarzając poddrzewa).