Nie wiem czy dobrze rozumiem to drzewo procesów, które podałeś, ale wydaje mi się, że wynika z niego, że proces 1 ma mieć dwa procesy potomne o numerach 2 i 3. Proces 2 ma mieć potomka o numerze 5, a proces 3 potomka o numerze 4. Z tego co Ty zrobiłeś wynika, że proces 1 ma potomków 2 i 4, proces 2 ma potomka 3, a proces 4 ma potomka 5. Tak więc ja bym nadał numery w printf: patrząc od góry 2,5,1,3,4.
printf z process ended masz w bloku else, który zaczyna się w 26 linijce i kończy w 47. Wykonuje się on 3 razy, ponieważ w tym bloku else są 3 procesy. Według Twojego numerowania: 1,4,5. Nie kończysz wcześniej procesów 4 i 5, więc one także dochodzą do tego momentu. Na końcu bloku if, który zaczyna się w linijce 30 napisz return 0, aby w tym miejscu zakończyły się procesy 4 i 5.
W 44 linijce masz wait(NULL), ale przydałoby się napisać to jeszcze raz, bo proces 1 ma dwóch potomków, powinien więc poczekać na obu, a nie tylko na jednego. Brakuje też return 0 na koniec programu i masz zły ukośnik w printf process1. Niezbyt czytelne formatowanie kodu. (np. dlaczego wnętrze if z linijki 18 nie ma wcięcia względem tego if?).